Установите повторяющиеся наборы данных в шаге данных SAS - PullRequest
3 голосов
/ 11 июля 2011

Предположим, у меня есть набор данных SAS, который выглядит следующим образом:

id  x
1   1234
2   2345
3   3456

Мне нужен новый набор данных, в котором этот набор данных прочитан (скажем) 2 раза, с новой переменной, указывающей, какая это «репликация»:

id  x     rep
1   1234  1
2   2345  1
3   3456  1
1   1234  2
2   2345  2
3   3456  2

Важно, чтобы данные читались в точном порядке - весь начальный набор данных читается один раз, затем снова и т. Д.

Есть идеи по эффективному способу сделать это на этапе данных? (На самом деле мой набор данных огромен, мне нужно прочитать его несколько раз, и я хочу избежать сортировки.)

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

data foo;
 set tmp; rep=1; output;
 set tmp; rep=2; output;
run;

Ответы [ 3 ]

8 голосов
/ 11 июля 2011

Если вы хотите перейти к шагу данных, то это будет работать, как вы описали.

data foo;
  set tmp (in=INA) tmp (in=INB);
  if INA then REP=1;
  if INB then REP=2;
run;
1 голос
/ 11 июля 2011
data rep;
  set tmp;

  do rep = 1 to 2; /* or 3, or whatever */
    output;
  end;
proc sort;
  by rep id;
run;

Вот и все.

0 голосов
/ 11 июля 2011

Вы можете попробовать это, используя view и proc, добавляя это так:

/* create view for rep=2 */

data rep2 / view=rep2;
 set tmp;
 rep = 2;
run;

/* create dataset for rep=1 */

data foo;
 set tmp;
 rep = 1;
run;

/* append rep=2 to rep=1 dataset */

proc append base=foo data=rep2;
run;
...