Как я могу использовать proc tranpose для преобразования этого набора данных? - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь преобразовать данные, указанные ниже.

   Date        Data1      Data2       Category 
 Dec-2012     59          12          Red
 Dec-2012     31          91          Blue 
 Jun-2014     11          71          Red
 Aug-2015     51          85          Yellow
 Aug-2015     16          66          Blue

Я хочу перенести эти данные в следующее

 Date    | RedData1| RedData2 | BlueData1 |BlueData2 |YellowData1 | YellowData2

 Dec-2012 |   59   |     12   |     31    |    91    |            |
 Jun 2014 |  11    |     71   |           |          |            |
 Aug 2015 |        |          |     16    |    66    |     51     |     85

Как бы я это сделал, используя proc sql? Или любой другой кусок кода SAS?

1 Ответ

1 голос
/ 16 апреля 2019

Преобразование формы данных может быть достигнуто с помощью двух шагов транспонирования.

  • step1 - поворот строки по порядку для векторизации значений data1 и data2 в один столбец с сохранением ассоциаций date и category.
  • step2 - поверните значения данных на date, используя category и _name_ в качестве переменных-идентификаторов, которые, в свою очередь, генерируют имена выходных столбцов.

Пример:

data have;
input Date monyy7. Data1 Data2 Category $;
format date monyy7.;
datalines;
Dec2012     59          12          Red
Dec2012     31          91          Blue 
Jun2014     11          71          Red
Aug2015     51          85          Yellow
Aug2015     16          66          Blue
run;

proc transpose data=have out=step1;
   by date category notsorted;
   var data1 data2;
run;   

proc transpose data=step1 out=want;
   by date;
   id category _name_;
   var col1;
run;   
...