我有一个数据集,其中包含员工列表及其工作时间。
Name Hours_CD_Max
Bob 455
Dan 675
Jane 543
Suzzy 575
Emily 234
我使用proc摘要数据步骤来计算这些员工的总工作时间。
Proc summary data = staff;
where position = 'PA_FT_UMC';
var Hours_CD_Max;
output out=PAFT_Only_Staff_Totals
sum = Hours_CD_Max_tot;
run;
我想使用此proc摘要数据步骤中的'Hours_CD_Max_tot'统计信息(2482),并将其应用于代码中需要进行计算的其他情况。
例如,我想把每个提供商的当前时间除以Hours_CD_Max_tot。
例如,创建一个像这样的数据集
data PA_FT_UMC_StaffingV2;
set PA_FT_UMC_StaffingV1 PAFT_Only_Staff_Totals;
if position = 'PA_FT_UMC';
PA_FT_Max_Percent= Hours_CD_Max/Hours_CD_Max_tot;
run;
Name Hours_CD_Max Hours_CD_Max_tot
Bob 455 2482
Dan 675 2482
Jane 543 2482
Suzzy 575 2482
Emily 234 2482
我意识到我可以使用proc freq计算工作时间的百分比,但是我真的很想拥有(2482)这个数字可以自由使用,以便将其插入更复杂的方程式中。
答案 0 :(得分:2)
如果要使用另一个数据集中的变量,则将其拉入当前代码中。
如果有BY变量,则可以将其合并到其他数据集中。如果您只有一个观察值,则只需在数据步骤的第一次迭代中运行SET命令即可。
data PA_FT_UMC_StaffingV2;
set PA_FT_UMC_StaffingV1 PAFT_Only_Staff_Totals;
if _n_=1 then set PAFT_Only_Staff_Totals(keep=Hours_CD_Max_tot);
if position = 'PA_FT_UMC';
PA_FT_Max_Percent= Hours_CD_Max/Hours_CD_Max_tot;
run;
答案 1 :(得分:1)
您需要从中创建一个宏变量,而SQL是最快的解决方案。
proc sql noprint;
select sum(hours_cd_max) into :hours_max
from have;
quit;
然后您可以稍后使用&hours_max