我有一个包含许多记录(其内容无关紧要)的数据集,以及每个记录末尾的一系列标志变量。像这样:
Record ID Flag 1 Flag 2 Flag 3
1 Y
2 Y Y
3
4
5
6 Y Y
我想创建一个打印的报告(或理想情况下,我可以打印的数据集),它看起来如下所示:
Variable N % Not Missing
Flag 1 6 33.33333
Flag 2 6 33.33333
Flag 3 6 16.66666
我可以使用Proc Freq一次完成一个接近我想要的变量的东西:
proc freq data=Work.Records noprint;
tables Flag1 /out=Work.Temp;
run;
我想我可以轻松地编写一个宏来循环遍历每个变量并将结果连接成一个数据集......但是这似乎太复杂了。必须有一个内置的SAS程序,但我找不到它。
有什么想法吗?
谢谢!
答案 0 :(得分:1)
欢迎来到Proc Tabulate这个神话般的世界。
PROC TABULATE
是PROC FREQ
无法删除时使用的过程。它与PROC FREQ
的工作方式类似,因为它有表语句,但除此之外,它几乎都是类固醇。
data test;
input RecordID (Flag1 Flag2 Flag3) ($);
datalines;
1 Y . .
2 . Y Y
3 . . .
4 . . .
5 . . .
6 . Y Y
;;;;
run;
proc tabulate data=test;
class flag1-flag3/missing;
tables (flag1-flag3),colpctn; *things that generate rows,things that generate columns;
run;
不幸的是,在不使用某些高级样式技巧的情况下隐藏空白行并不容易,但如果您不介意看到这两行,则效果非常好。