使用SAS EG计算各变量总时长占整体总时长的百分比
SAS EG计算各活动总耗时占整体总时长的百分比
嗨,我明白你要的是整体层面的占比而不是逐行计算,这就给你梳理两种在SAS EG里可行的方法,都是先算出所有活动的总时长,再计算每个活动总耗时的占比:
方法1:PROC SUMMARY + DATA 步分步计算
这种方法先通过PROC SUMMARY汇总各变量的总时长,再单独计算整体总时长和占比,逻辑清晰,适合变量较多的场景:
- 首先在SAS EG中新建一个代码节点,输入以下代码(替换成你的实际数据集名和变量名):
/* 第一步:计算每个耗时变量的总时长 */ proc summary data=你的数据集名 nway; var ZZZ_01 ZZZ_02 ZZZ_03 ...; /* 把截图里所有需要计算的耗时变量列在这里 */ output out=total_sums sum=ZZZ_01_total ZZZ_02_total ZZZ_03_total ...; run; /* 第二步:计算整体总时长和各变量占比 */ data activity_percentages; set total_sums; /* 计算所有活动的总时长 */ overall_total = sum(ZZZ_01_total, ZZZ_02_total, ZZZ_03_total, ...); /* 逐个计算每个活动的占比 */ ZZZ_01_pct = (ZZZ_01_total / overall_total) * 100; ZZZ_02_pct = (ZZZ_02_total / overall_total) * 100; ZZZ_03_pct = (ZZZ_03_total / overall_total) * 100; ... /* 只保留需要的结果变量 */ keep ZZZ_01_pct ZZZ_02_pct ZZZ_03_pct ... overall_total; run;
- 运行代码后,
activity_percentages数据集里就会包含你需要的各活动占比和整体总时长。
方法2:PROC SQL一步到位计算
如果你的变量数量不多,用PROC SQL可以一次性完成汇总和占比计算,更简洁:
proc sql; create table activity_percentages as select sum(ZZZ_01) as ZZZ_01_total, sum(ZZZ_02) as ZZZ_02_total, sum(ZZZ_03) as ZZZ_03_total, ..., /* 计算整体总时长 */ sum(ZZZ_01 + ZZZ_02 + ZZZ_03 + ...) as overall_total, /* 计算每个活动的占比 */ (sum(ZZZ_01)/sum(ZZZ_01 + ZZZ_02 + ZZZ_03 + ...))*100 as ZZZ_01_pct, (sum(ZZZ_02)/sum(ZZZ_01 + ZZZ_02 + ZZZ_03 + ...))*100 as ZZZ_02_pct, (sum(ZZZ_03)/sum(ZZZ_01 + ZZZ_02 + ZZZ_03 + ...))*100 as ZZZ_03_pct, ... from 你的数据集名; quit;
运行这段代码后,同样会生成包含占比结果的activity_percentages数据集。
小提示
- 记得把代码里的
你的数据集名替换成你实际使用的数据集名称 - 变量名要和你截图里的一致(比如截图里的
ZZZ_01、ZZZ_02等) - 如果担心除数为0的情况,可以加个判断,比如
if overall_total > 0 then ZZZ_01_pct = (ZZZ_01_total / overall_total)*100; else ZZZ_01_pct = .;
内容的提问来源于stack exchange,提问作者Nini
相关产品推荐
相关产品推荐

