Как денормализовать данные - PullRequest
1 голос
/ 09 мая 2019

У меня есть вывод средства proc, в котором есть строки для каждой сводной статистики и столбцы для каждой переменной.Как я могу «повернуть» это так, чтобы оно было уникальным с помощью переменной «by»?

Мой обходной путь - взять выходные данные и объединить их с собой, используя команды WHERE и RENAME.Есть ли более простой способ сделать это?

proc means data=data1 n mean max min std noprint;
  var var1 var2;
  by month;
  output out=SummaryStats;
run;
data SummaryStatsUnique;
  merge SummaryStats (in=in1 keep=month var1 var2 _stat_ rename=(var1=var1_N var2=var2_N) where=(_stat_="N"))
        SummaryStats (in=in2 keep=month var1 var2 _stat_ rename=(var1=var1_MEAN var2=var2_MEAN) where=(_stat_="MEAN"))
        SummaryStats (in=in3 keep=month var1 var2 _stat_ rename=(var1=var1_MAX var2=var2_MAX) where=(_stat_="MAX"))
        SummaryStats (in=in4 keep=month var1 var2 _stat_ rename=(var1=var1_MIN var2=var2_MIN) where=(_stat_="MIN"))
        SummaryStats (in=in5 keep=month var1 var2 _stat_ rename=(var1=var1_STD var2=var2_STD) where=(_stat_="STD"))
  ;
  by month;
  if ^(first.month and last.month) then abort;
  if ^(in1 and in2 and in3 and in4 and in5) then abort;
run;

Это должно взять таблицу в следующем формате:

MONTH     _STAT_     Var1     Var2
2019.01   N          19       15
2019.01   MEAN       17.5     13
2019.01   MAX        21       16
2019.01   MIN        15       12
2019.01   STD        2.5      1.5
2019.02   ...

и вывести в следующем виде:

MONTH     VAR1_N     VAR2_N     VAR1_MEAN    VAR2_MEAN   ...
2019.01   19         15         17.5         13
2019.02   ...

Ответы [ 3 ]

3 голосов
/ 09 мая 2019

Почему бы не использовать AUTONAME и создать данные напрямую.

proc summary data=sashelp.class nway;
   class age;
   var height weight;
   output out=summary n= mean= max= min= std= / autoname;
   run;

enter image description here

1 голос
/ 10 мая 2019

Преобразовать выходные данные PROC MEANS / SUMMARY по умолчанию в автоматический стиль имени.

proc means noprint missing chartype data=sashelp.class;
   class sex;
   output out=stat1;
   run;
proc print;
   run;
proc transpose data=stat1(drop=_freq_) out=stat2;
   by _type_ sex _stat_ notsorted;
   run;
proc print;
   run;
proc transpose data=stat2 out=stat3 delim=_;
   by _type_ sex;
   id  _name_ _stat_;
   var col1;
   run; 
proc print;
   run;

enter image description here

1 голос
/ 09 мая 2019

Я думаю, что эти опции дают вам более полезный набор данных с переменными в строках с уровнями CLASS.

ods select none;
proc means data=sashelp.class n mean max min std stackods;
   class age;
   var height weight;
   ods output summary=summary;
   run;
ods select all;
proc print;
   run;

enter image description here

...