sas如何只为某些值做频率

时间:2016-01-07 15:07:23

标签: sas frequency survey

我有一些可能的回复调查数据,例如:

@Override
protected void beforeTerminalGUI(Form f) {
    ImageViewer iv = findImageViewer(f);
    Image i = Resources.openLayered("/theme").getImage("stillstand.PNG");
    if (i != null) {
        iv.setImage(i.scaledWidth(Display.getInstance().getDisplayWidth()));
    } else {
        System.out.println("Image not found");
    }
}

我需要按问题计算频率,因此只有是/否(其他问题有不同的反应,如经常,非常频繁等)计入总数 - 而不是具有多重标记的那些。有没有办法使用proc freq或其他方法排除这些?

结果:

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

2 个答案:

答案 0 :(得分:1)

使用proc 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 :(得分: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;