我是SAS的新手,所以在这里寻找建议/想法..
基本上我想创建包含观察次数,某些群体和手段的百分比的汇总表/报告。
考虑以下示例:
A/C No Status DaysToStatus
1 Suspend 10
2 Blocked 20
3
4 Suspend 20
我的预期输出/报告类似于:
Average Days To Suspend Average Days to Blocked % Suspend %Blocked
15 20 50% 25%
我可以使用Proc Report功能轻松完成平均值,但即使使用Compute函数,我仍在努力将观察结果及其百分比纳入其中。
关于我如何做这件事的任何想法?
答案 0 :(得分:3)
您尚未发布代码,因此可能与您的代码不同。我认为你不需要compute
。使用三列构建报告:status(group),daystostatus mean和用于计算行的pctn
统计信息。使用missing
语句中的proc report
选项来确定总数的百分比,包括状态缺失的百分比。
proc report data=yourdata missing nowd;
column status daystostatus pctn;
define status / group;
define daystostatus / analysis mean 'Avg days to status';
define pctn / 'Pct of total' format=percent10.;
run;
答案 1 :(得分:1)
首先准备数据
data have;
Number = 1;
Status = 'Suspend';
DaysToStatus = 10;
output;
Number = 2;
Status = 'Blocked';
DaysToStatus = 20;
output;
Number = 3;
Status = '';
DaysToStatus =.;
output;
Number = 4;
Status = 'Suspend';
DaysToStatus =20;
output;
run;
这应该适合你:
data want;
set have end = eof;
if Status='Suspend' then do;
sum_suspend+DaysToStatus;
count_suspend+1;
end;
else if status='Blocked' then do;
sum_blocked+DaysToStatus;
count_blocked+1;
end;
total_sum+DaysToStatus;
total_count = _n_;
Average_Days_To_Suspend = sum_suspend / count_suspend;
Average_Days_To_blocked = sum_blocked / count_blocked;
percent_suspend = count_suspend/total_count;
percent_blocked = count_blocked/total_count;
if eof;
drop n status number DaysToStatus sum_: count_: total_:;
run;
答案 2 :(得分:1)
proc sql;
选择
sum(状态eq' Suspend'然后DaysToStatus else 0 end)/ sum(状态eq' Suspend'然后DaysToStatus else 0 end)的情况作为
avg_days_to_suspend,
总和(状态eq' Blocked'然后DaysToStatus else 0结束时的情况)/
sum(状态eq' Blocked'然后DaysToStatus else 0结束时的情况)作为
avg_days_to_blocked,
总和(状态均衡'暂停'然后是DaysToStatus否则0的情况 结束)/ sum(DaysToStatus)as percent_suspend format = percent7.0,
总和(状态eq'阻止'然后DaysToStatus否0的情况) 结束)/ sum(DaysToStatus)as percent_blocked format = percent7.0
来自work.in_ds; / *将work.in_ds替换为您自己的数据集* /
退出;