在另一个数据步骤中使用Proc摘要统计信息

时间:2019-06-10 19:23:31

标签: sas

我有一个数据集,其中包含员工列表及其工作时间。

  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)这个数字可以自由使用,以便将其插入更复杂的方程式中。

2 个答案:

答案 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

在计算中使用它