Предположим, у меня есть следующая таблица:
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
?
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;
Почему бы не использовать обычный шаг данных для дублирования строки? Чем делать то, что вы хотели.
data want;
set have;
do _i = 1 to count;
output;
run;
drop _i;
run;
proc print;run;
Похожие вопросы
Новые вопросы
sas
Язык SAS - это 4GL, который лежит в основе системы SAS, набора продуктов, сосредоточенных вокруг обработки данных и статистических процедур. При возникновении вопросов о коде, пожалуйста, включите ваш код и некоторые данные, чтобы воспроизвести вашу проблему, либо в выражениях линий данных / карточек, либо с помощью набора данных sashelp, например sashelp.class или sashelp.cars.