1

次の形式のデータがあります。

Country    City1    City2    City3       AverageTemperature
UK         London   Glasgow  Manchester  15
Italy      Rome     Naples   Venice      25
Germany    Munich   Berlin               20
USA        New York                      25

SQL または SAS データ ステップのいずれかを使用して、次の形式でデータを取得したいと考えています。

Country    City        AverageTemperature
UK         London      15
UK         Glasgow     15
UK         Manchester  15
Italy      Rome        25
Italy      Naples      25
Italy      Venice      25
Germany    Munich      20
Germany    Berlin      20
USA        New York    25

個々の行にまたがってデータを取得できるようにします。都市が空白ではない3つの都市の列をループすることでこれを行うことを考えましたが、自信を持ってこれを行う方法がわかりません-SQLまたはSASで簡単に実行できますか? ポインタだけでも大歓迎です。

4

4 に答える 4

2
SELECT COUNTRY, City1,  AverageTemperature FROM Table_Name
UNION ALL 
SELECT COUNTRY, City2,  AverageTemperature FROM Table_Name
UNION ALL 
SELECT COUNTRY, City3,  AverageTemperature FROM Table_Name

City 列が null でない行を取得するには、次のようなことができます

SELECT COUNTRY, City1,  AverageTemperature FROM Table_Name 
WHERE City1 IS NOT NULL
UNION ALL 
SELECT COUNTRY, City2,  AverageTemperature FROM Table_Name 
WHERE City2 IS NOT NULL
UNION ALL 
SELECT COUNTRY, City3,  AverageTemperature FROM Table_Name 
WHERE City3 IS NOT NULL
于 2013-12-22T01:59:35.950 に答える
1

「比較的」標準的な SQL を使用して、これをアンピボットできます。データを 1 回だけスキャンする必要があるアプローチを次に示します。

select country, city, averagetemperatur
from (select t.country,
             (case when n = 1 then t.city1
                   when n = 2 then t.city2
                   when n = 3 then t.city3
             end) as city,
            t.averagetemperature
     from t cross join
          (select 1 as n union all select 2 union all select 3) n
    ) t
 where city is not null;

3 つの行 ( ) を持つテーブルを作成するための正確な構文はn、データベースによって異なります。

于 2013-12-22T02:00:21.003 に答える
0

マクロループが仕事をするはずです:

%MACRO Cities ;
  %DO N=1 %TO 3 ;
    proc sql ;
      create table Cities_&N as
      select Country, City&N as City, AverageTemperature
      from your_table_name_here
      where City&N is not null ;
    quit ;
  %END ;

  data Cities ;
    set Cities_: ;
  run ;
%MEND ;

%Cities ;
于 2014-08-22T14:28:21.120 に答える