我有一些可能的回复调查数据,例如:
@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
答案 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;