确定数据集的所有变量中的某些值的频率

时间:2014-11-13 17:59:11

标签: sas frequency missing-data

我希望获得一个列出所有变量的频率表,但只告诉我次数" -2"," -1"和" M"出现在每个变量中。

目前,当我运行以下代码时:

proc freq data=mydata;
tables _ALL_
/list missing;

我为每个变量及其所有值(有时是100)获得一个表。我可以获得具有我想要的三个值的表格,还有其他一切被抑制?

1 个答案:

答案 0 :(得分:1)

你可以通过多种方式做到这一点。

首先,您可能希望首先对数据集执行此操作以允许您过滤该数据集。我会使用PROC TABULATE,但如果您更喜欢它,可以使用PROC FREQ。

*make up some data;
data mydata;
  call streaminit(132);
  array x[100];
  do _i = 1 to 50;
    do _t = 1 to dim(x);
      x[_t]= floor(rand('Uniform')*9-5);
    end;
    output;
  end;
  keep x:;
run;

ods _all_ close;   *close the 'visible' output types;
ods output onewayfreqs=outdata;  *output the onewayfreqs (one way frequency tables) to a dataset;
proc freq data=mydata;
  tables _all_/missing;
run;
ods output close;  *close the dataset;
ods preferences;   *open back up your default outputs;

然后过滤它,一旦你完成了它打印它你想要的。请注意,在PROC FREQ输出中,您会得到每个不同变量的列 - 不是非常有用。 F_变量是格式化的值,然后可以使用coalesce进行组合。我假设它们都是数字变量 - 将f_val定义为字符,如果有任何字符变量或应用了字符格式的变量,则使用coalescec

data has_values;
  set outdata;
  f_val = coalesce(of f_:);
  keep table f_val frequency percent;
  if f_val in (0,-1,-2);
run;

最后一行只保留0,-1,-2。