Как сгруппировать 50 столбцов для каждой строки в sas и создать новый столбец для их значений? - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть 50 категориальных столбцов, которые содержат числа и 1 отдельный столбец для уникального идентификатора и 100 строк.Я хочу создать из него новый набор данных, который будет иметь 3 столбца: Column1 для уникальных идентификаторов;Столбец2 для категориальных столбцов, сгруппированных для каждой строки;и, столбец 3 для числовых значений.

В настоящее время у меня есть это:

ID  Column1 Column2..........Column 50
--- ------- -------          ---------
A     23      40                90
B     50      7                 79
C     0       9                 4

Я хочу это,

ID   GroupedColumn   Value
---   -----------    -----
 A      Column1        23
        Column2        40
          .
         .
      Column50       90
B      Column1        50
       Column2        7
       .
       .
      Column50       79
C     Column1        0
      Column2        0
       . 
       .
      Column50       4

Ответы [ 3 ]

0 голосов
/ 29 ноября 2018

Просто используйте PROC TRANSPOSE.

proc transpose data=have out=want ;
  by id;
run;

Автоматическая переменная _NAME_ будет иметь исходное имя переменной, а значения будут находиться в переменной с именем COL1.Вы можете использовать опции в операторе PROC TRANSPOSE, чтобы изменить имена по умолчанию.

proc transpose name=GroupedColumn prefix=Value out=want;

Обратите внимание, что к имени все равно будет добавлено 1 для первого наблюдения для каждого идентификатора.Если у вас есть несколько наблюдений на один идентификатор, вы также получите VALUE2, VALUE3 и т. Д.

Или используйте параметр набора данных rename= в выходном наборе данных, чтобы изменить имена новых переменных.

proc transpose name=GroupedColumn out=want(rename=(col1=Value));
0 голосов
/ 29 ноября 2018

Вы можете повторно пометить переменную роли name , если хотите использовать небольшую хитрость.

proc transpose data=sashelp.class out=test;
   by name;
   var _all_;
   attrib _name_: label='This is how';
   run;

enter image description here

0 голосов
/ 29 ноября 2018

Proc transpose может помочь вам.

...