计算SAS中的观察数量及其百分比

时间:2015-02-09 03:56:49

标签: sas

我是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函数,我仍在努力将观察结果及其百分比纳入其中。

关于我如何做这件事的任何想法?

3 个答案:

答案 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(Da​​ysToStatus)as percent_suspend format = percent7.0,

总和(状态eq'阻止'然后DaysToStatus否0的情况)    结束)/ sum(Da​​ysToStatus)as percent_blocked format = percent7.0

来自work.in_ds; / *将work.in_ds替换为您自己的数据集* /

退出;

相关问题