Предположим, у меня есть следующая таблица:

id | var1 | var2 | count
1  | a    | b    | 3
2  | b    | a    | 4 
3  | c    | e    | 1

Теперь я хотел бы рассчитать кросс-таблицу:

PROC TABULATE;
   CLASS var1 var2;
   TABLE var1, var2;
RUN;

Однако моя проблема в том, что count - переменная, скажем, 4, означает, что конкретный случай должен фактически появляться в таблице 4 раза. Таким образом, таблица выше должна быть:

id | var1 | var2 | count
1  | a    | b    | 3
1  | a    | b    | 3
1  | a    | b    | 3
2  | b    | a    | 4 
2  | b    | a    | 4 
2  | b    | a    | 4 
2  | b    | a    | 4 
3  | c    | e    | 1

Можно ли взвесить количество случаев непосредственно в PROC TABULAR или как я могу добавить дополнительные случаи в соответствии со значением count?

0
D. Studer 19 Авг 2019 в 11:47

2 ответа

Лучший ответ

Используйте FREQ

data test;
   infile cards dsd dlm='|' firstobs=2;
   input id (var1-var2)(:$1.) count;
   list;
   cards;
id | var1 | var2 | count
1  | a    | b    | 3
2  | b    | a    | 4 
3  | c    | e    | 1
;;;;
proc print;
   run;
PROC TABULATE;
   FREQ count;
   CLASS var1 var2;
   TABLE var1, var2;
   RUN;
3
data _null_ 19 Авг 2019 в 13:46

Почему бы не использовать обычный шаг данных для дублирования строки? Чем делать то, что вы хотели.

data want;
  set have;
  do _i = 1 to count;
    output;
  run;
  drop _i;
run;
proc print;run;
1
Lee 19 Авг 2019 в 09:54