在 SAS 中使用循环列出每个变量的存在频率

List frequency of presence of each variable using loop in SAS

我已经在这里尝试了一些解决方案,但仍然无法获得所需的输出。

我的数据如下(ID唯一):

  data have;
    input id code_1 code_2 code_3 code_4 randa randb randc$;
    datalines;
    19736 1 0   1   0   5.5 10 11
    19737 0 0   0   1   2   4.8 19
    19738 1 0   1   1   6   9   2.6
    19739 1 1   0   1   1.6 7   8.5
    ;;;;;
    run

我只需要获取各种代码出现的频率。 (代码 1、代码 2 等)

期望的输出:

  Variable Frequency  

code_1      3

code_2      1 

code_3      2 

code_4      3 

我尝试了this中的解决方案,代码如下:

ods output onewayfreqs=preds;
proc freq data=have;
tables _all_;
run;
ods output close;

proc tabulate data=preds;
class table frequency;
tables table,frequency;
run;

输出:

     Frequenza 
    1 2 3 
    N N N 
    Table 1 . 1 
    Tabella code_1  
    Tabella code_2  1 . 1 
    Tabella code_3  . 2 . 
    Tabella code_4  1 . 1 
    Tabella id  4 . . 
    Tabella randa  4 . . 
    Tabella randb  4 . . 
    Tabella randc  4 . . 

我也试过下面的代码:

proc freq data=have order=freq;
array codes code_:;
  do _n_ = 1 to dim(codes);
    table codes(_n_)/list missing out=var1_freq;
  end;
run;

但是我不知道如何正确编写代码。

我正在获取以下代码的输出(一次仅针对一个代码):

   proc freq data=have order=freq ;
    tables code_1/list missing out=var1_freq;
    run;

但是如何获取多个代码?非常感谢您的帮助..!

tables 语句的 out= 选项只会为列出的 last 变量生成输出,因此您不会获得所有 4 个代码。

转置后可以统计1个值code_*个变量。

data have;
input id code_1 code_2 code_3 code_4 randa randb randc $ ;
datalines;
19736 1 0 1 0  5.5 10    11
19737 0 0 0 1  2    4.8  19
19738 1 0 1 1  6    9     2.6
19739 1 1 0 1  1.6  7     8.5
;

data idcodes / view=idcodes;
  set have;
  array codes code_1-code_4;
  do _n_ = 1 to dim (codes);
    variable = vname(codes(_n_));
    flag = codes(_n_);
    output;
  end;
  keep id variable flag;
run;

proc freq data=idcodes;
  where flag;
  table variable / out=freqs(keep=variable count);
run;

假设代码只有0/1,你也可以将代码求和并转置结果。

proc means noprint data=have;
  var code_:;
  output out=flagsum sum=;
run;

proc transpose data=flagsum out=want(rename=(_name_=variable col1=frequency));
  var code_:;
run;