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

Sas 确定数据集所有变量中仅某些值的频率,sas,frequency,missing-data,Sas,Frequency,Missing Data,我想得到一个列出所有变量的频率表,但只告诉我每个变量中出现“-2”、“-1”和“M”的次数 当前,当我运行以下代码时: proc freq data=mydata; tables _ALL_ /list missing; 我为每个变量和它的所有值(有时是100)得到一个表。我是否可以只获取包含我想要的三个值的表,而不包含其他所有值?可以通过多种方法实现这一点 首先,您可能希望首先对数据集执行此操作,以允许您过滤该数据集。我会使用PROC tablate,但如果您更喜欢,可以使用PROC FRE

我想得到一个列出所有变量的频率表,但只告诉我每个变量中出现“-2”、“-1”和“M”的次数

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

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

我为每个变量和它的所有值(有时是100)得到一个表。我是否可以只获取包含我想要的三个值的表,而不包含其他所有值?

可以通过多种方法实现这一点

首先,您可能希望首先对数据集执行此操作,以允许您过滤该数据集。我会使用PROC tablate,但如果您更喜欢,可以使用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
定义为字符,如果有任何字符变量或应用了字符格式的变量,则使用
coalescc

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