2016-01-07 2 views
1

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

  Q1 
Person1 Yes 
Person2 No 
Person3 Missing 
Person4 Multiple Marks 
Person5 Yes 

Мне нужно вычислить частоты от вопроса, так что только да/нет (другие вопросы имеют разнообразные ответы, такие как часто, очень часто и т. д.) подсчитываются в итоговых показателях, а не в нескольких знаках. Есть ли способ исключить их с помощью proc freq или другого метода?

Результат:

Yes: 2 
No: 1 
Total: 3 
+1

Пожалуйста, напишите, что вы пробовали. Изучите использование WHERE на вашей частоте proc. – Reeza

ответ

1

Использование ргос FREQ, я бы что-то вроде этого:

proc freq data=have (where=(q1 in ("Yes", "No"))); 
tables q1/out=want; 
run; 

Выход:

Q1 Count Percent 
No 1 33.333333333 
Yes 2 66.666666667 

Proc SQL:

proc sql; 
select 
    sum(case when q1 eq "Yes" then 1 else 0 end) as Yes 
    ,sum(case when q1 eq "No" then 1 else 0 end) as No 
    ,count(q1) as Total 
from have 
where q1 in ("Yes", "No"); 
quit; 

Выход:

Yes No Total 
2 1 3 
1

Лучший способ сделать это с помощью форматов.

Вместо того, чтобы хранить ваши данные в виде символьных строк, вы должны хранить их как числовые переменные. Это позволяет использовать числовые отсутствующие значения для кодирования этих значений, которые вы не считаете правильными ответами; используя форматы, вы можете получить свой торт и съесть его (т. е. позволить вам по-прежнему иметь эти симпатичные ярлыки ответа).

Вот пример. Чтобы понять это, вам нужно понять SAS special missings. Обратите внимание, что инструкция missing сообщает SAS рассмотреть один «M» на входе как .M (и аналогичный для D и R). Затем я показываю два результата: PROC FREQ, один с отсутствующими пропущенными, один с включенным, чтобы показать разницу.

proc format; 
    value YNQF 
    1 = 'Yes' 
    2 = 'No' 
    . = 'Missing' 
    .M= 'Multiple Marks' 
    .D= "Don't Know" 
    .R= "Refused" 
    ; 
quit; 

missing M R D; 
data have; 
    input Q1 Q2 Q3; 
    format q1 q2 q3 YNQF.; 
    datalines; 
1 1 2 
2 1 R 
. . 1 
M 1 1 
1 . D 
;;;; 
run; 

proc freq data=have; 
    tables (q1 q2 q3); 
    tables (q1 q2 q3)/missing; 
run;