如何计算SAS中频率表的分位数数据?
我很想把我的数据分成三份,但我只有一份按州划分的统计汇总表。具体地说,我已经估计了各州的入学人数,我想计算哪些州占所有入学人数的前三分之一。所以,前三分之一应该至少包括.33333的总累积百分比 我尝试了各种方法来指定.33333和.40000之间的累积百分比,但没有成功地指定一般情况<代码>PROC RANK也无法使用,因为数据被组织为频率表 我在下面包含了一些虚拟(但具有代表性)数据如何计算SAS中频率表的分位数数据?,sas,frequency,quantile,Sas,Frequency,Quantile,我很想把我的数据分成三份,但我只有一份按州划分的统计汇总表。具体地说,我已经估计了各州的入学人数,我想计算哪些州占所有入学人数的前三分之一。所以,前三分之一应该至少包括.33333的总累积百分比 我尝试了各种方法来指定.33333和.40000之间的累积百分比,但没有成功地指定一般情况PROC RANK也无法使用,因为数据被组织为频率表 我在下面包含了一些虚拟(但具有代表性)数据 根据cum_percent的值,占入学人数前三分之一的州是:加利福尼亚州、德克萨斯州、纽约州、佛罗里达州和伊利诺
根据
cum_percent
的值,占入学人数前三分之一的州是:加利福尼亚州、德克萨斯州、纽约州、佛罗里达州和伊利诺伊州
有没有办法通过编程来实现这一点?我最终想指定一个用于选择状态的标志变量
谢谢…看来你已经完成了90%的工作。如果您只需要一种方法将cum_%放入标记的桶中,那么设置格式非常简单
proc format;
value pctile
low-0.33333 = 'top third'
0.33333<-.4 = 'next bit'
0.4<-high = 'the rest'
;
run;
options fmtsearch=(work);
按照以下方式重写上一个数据步骤:
data dummy_4(drop=found);
set dummy_3;
retain cum_percent 0 found 0;
cum_percent + percent_total;
if cum_percent < (1/3) then do;
top_third = 1;
end;
else if ^found then do;
top_third = 1;
found =1;
end;
else
top_third = 0;
run;
数据伪4(drop=found);
设置虚拟_3;
保留百分比0,发现0;
累计百分比+总百分比;
如果cum_百分比<(1/3),则执行该操作;
上三分之一=1;
结束;
否则,如果发现,则执行;
上三分之一=1;
发现=1;
结束;
其他的
上三分之一=0;
跑
注意:您的第一个。
语法不正确<代码>第一个。和最后一个
。只能分组工作。您可以通过CUM_PERCENT+PERCENT_total获得正确的CUM_PERCENT值代码>语句
我不知道有哪个PROC可以为您这样做。您可以使用PROC FREQ with WEIGHT语句轻松计算百分比,然后使用LAG函数选择前三个百分比:
proc freq data=state_counts noprint order=data;
tables state / out=state_counts2;
weight enrollment;
run;
data top3rd;
set state_counts2;
cum_percent+percent;
if lag(cum_percent)<100/3 then top_third=1;
run;
proc freq data=state\u counts noprint order=data;
表state/out=state\u counts2;
体重登记;
跑
数据排名第三;
设置状态_计数2;
cum_百分比+百分比;
如果落后(cum_%的话),你不会失去伊利诺伊州作为前三名的成员吗?它的累积百分比>0.3333,但仍然排在前三位,因为前一个州(佛罗里达州)有cum_percent我看到保留和第一个。
用于为整个数据集指定计数器。。。在这方面,您是否发现有任何文档对您有所帮助?试试这个。
data dummy_4(drop=found);
set dummy_3;
retain cum_percent 0 found 0;
cum_percent + percent_total;
if cum_percent < (1/3) then do;
top_third = 1;
end;
else if ^found then do;
top_third = 1;
found =1;
end;
else
top_third = 0;
run;
proc freq data=state_counts noprint order=data;
tables state / out=state_counts2;
weight enrollment;
run;
data top3rd;
set state_counts2;
cum_percent+percent;
if lag(cum_percent)<100/3 then top_third=1;
run;