【问题标题】:sas how to do frequencies for only certain valuessas如何只为某些值做频率
【发布时间】:2016-04-12 01:01:05
【问题描述】:

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

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

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

结果:

Yes: 2
No: 1
Total: 3

【问题讨论】:

  • 请发布您尝试过的内容。考虑在你的 proc freq 上使用 WHERE。

标签: sas frequency survey


【解决方案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;

【讨论】:

    【解决方案2】:

    使用 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
    

    过程 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 
    

    【讨论】:

      猜你喜欢
      • 2022-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-13
      相关资源
      最近更新 更多