SAS транспонировать данные в длинную форму - PullRequest
0 голосов
/ 11 июня 2018

У меня есть следующий набор данных, и я надеюсь перевести его в длинную форму:

data have ;
  input Height $ Front Middle Rear ;
  cards;
  Low    125 185 126
  Low    143 170 136
  Low    150 170 129
  Low    138 195 136
  Low    149 162 147
  Medium 141 176 128
  Medium 137 161 133
  Medium 145 167 148
  Medium 150 165 145
  Medium 130 184 141
  High   129 157 149
  High   141 152 137
  High   148 186 138
  High   130 164 126
  High   137 176 138
  ;
run;

Здесь высота низкая, средняя и высокая.Расположение спереди, посередине и сзади.Числовые значения - это цены в зависимости от местоположения и высоты книги на книжной полке.

Я надеюсь преобразовать набор данных в длинную форму со столбцами:

Высота, местоположение и цена

Следующий код позволяет мне только переводить Location в длинную форму.Как мне транспонировать высоту одновременно?

data bookp;
set bookp;
dex = _n_; 
run;

proc sort data=bookp;
by dex;
run;

proc transpose data=bookp
out=bookpLong (rename=(col1=price _name_= location )drop= _label_ dex);
var front middle rear;
by dex; 
run;

1 Ответ

0 голосов
/ 11 июня 2018

Я думаю, вам просто нужно включить HEIGHT в оператор BY.

Сначала давайте преобразуем ваши данные в качестве примера в набор данных SAS.

data have ;
  input Height $ Front Middle Rear ;
cards;
 Low    125 185 126
 Low    143 170 136
 Medium 141 176 128
 Medium 137 161 133
 High   129 157 149
 High   141 152 137
;

Теперь давайте добавим идентификатор для уникальной идентификациикаждый ряд.Обратите внимание, что если вы действительно читаете данные с помощью шага данных, вы можете сделать это на том же шаге, который читает данные.

data with_id ;
  row_num+1;
  set have;
run;

Теперь мы можем транспонировать.

proc transpose data=with_id out=want (rename=(_name_=Location col1=Price));
  by row_num height ;
  var front middle rear ;
run;

Результаты:

Obs    row_num    Height    Location    Price

  1       1       Low        Front       125
  2       1       Low        Middle      185
  3       1       Low        Rear        126
  4       2       Low        Front       143
  5       2       Low        Middle      170
  6       2       Low        Rear        136
  7       3       Medium     Front       141
  8       3       Medium     Middle      176
  9       3       Medium     Rear        128
 10       4       Medium     Front       137
 11       4       Medium     Middle      161
 12       4       Medium     Rear        133
 13       5       High       Front       129
 14       5       High       Middle      157
 15       5       High       Rear        149
 16       6       High       Front       141
 17       6       High       Middle      152
 18       6       High       Rear        137
...