我正在努力将SAS代码复制到R代码中,我遇到了以下SAS代码片段 -
proc means data=A noprint;
by name date;
id comp_no;
var price;
id rep_dats act no;
output out= test(drop=_type_ _freq_)
median=median n=num;
run;
Run Code Online (Sandbox Code Playgroud)
我知道'by'语句用于分组以提供该级别的统计信息.但是,'id'用于什么?为什么有两个'id'陈述?我检查了SAS帮助,但我真的不明白.我还在http://support.sas.com/documentation/cdl/en/proc/65145/HTML/default/viewer.htm#p19dfq16fqt1t3n1eroiabnn6r3s.htm查看了他们的示例.但没有说明ID使用的例子.
因为我无法访问SAS,所以我无法尝试这一点,看看输出是怎样的.任何澄清对我都有很大帮助.谢谢!
该proc means过程可以计算并显示数据集的简单摘要统计信息并输出该摘要统计信息.默认情况下,它通过分析数据集中的每个数字变量来汇总数值变量(列).
通过使用ID语句by中proc means会产生每组一个值.这一个值是组中ID中指定的第一个变量的最大值by.因此,如果您指定了许多变量,例如id A B;,它将为该组输出A的唯一最大值.
http://support.sas.com/documentation/cdl/en/proc/61895/HTML/default/viewer.htm#a000146733.htm
顺便说一下,我不知道你的数据集是怎么样的,但似乎你proc means只是总结了价格变量.
例如,如果您有数据集:
Obs sex A B C D
1 M 20 50 1 34
2 F 500 45 3 45
3 M 200 23 7 32
4 M 120 67 5 44
5 F 400 98 2 59
Run Code Online (Sandbox Code Playgroud)
然后
proc means data=sorted;
by sex;
var A B;
id D C;
output out=means(drop =_type_ _freq_);
run;
Run Code Online (Sandbox Code Playgroud)
将输出:
sex D C _STAT_ A B
F 59 2 N 2.000 2.0000
F 59 2 MIN 400.000 45.0000
F 59 2 MAX 500.000 98.0000
F 59 2 MEAN 450.000 71.5000
F 59 2 STD 70.711 37.4767
M 44 5 N 3.000 3.0000
M 44 5 MIN 20.000 23.0000
M 44 5 MAX 200.000 67.0000
M 44 5 MEAN 113.333 46.6667
M 44 5 STD 90.185 22.1886
Run Code Online (Sandbox Code Playgroud)
请注意,在变量中D,59是F组中D的最大值,但C不是因为首先指定了D. 对于M组来说也是类似的情况,其中C只是与最大值在同一行上的数字D.