在 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;
我已经在这里尝试了一些解决方案,但仍然无法获得所需的输出。
我的数据如下(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;