按proc摘要中的两个类变量排序,包括所有缺少的类组合

时间:2019-05-11 11:19:24

标签: sas

原始数据

GrantNumber    ServiceID   Region1   Total

    1             1          1        50
    1             2          1        60
    2             1          2        70

我需要输出包含缺少的类变量组合。然后,我希望根据这两个类变量ServiceID和Region1对输出进行排序 例 ServiceID,Region1和Total是列标题

ServiceID Region1      Total

1         Atlantic     50
2         Atlantic     40
3         Atlantic     30
1         West         20
2         West         10
3         West         .
4         West         .

我试图包括completetypes以与preloadfmt交互,并通过一个不起作用的类变量对其进行排序。

 Proc summary data=Allocate.Merge_All_s1 nway completetypes ;
 By ServiceID;
 Types ServiceID*Region1;
 Class Region1 ServiceID / preloadfmt missing ;
 Var  Total
 output out=Allocate.Merge_All_s_Aggregate  sum=/keepLen;
 run;

 Data Allocate.Merge_All_final;
 set Allocate.Merge_All_s_Aggregate(Keep=ServiceID Region1 Total);
 run;

 ODS HTML File= "\Results12.XLS";
 Proc Print Data=Allocate.Merge_All_final ;
 Run;
 ODS HTML Close;

2 个答案:

答案 0 :(得分:2)

好像您想要CLASSDATA选项。让我们为它提供一个包含所有可能组合的数据集。

因此,使用所有组合创建一个数据集。

data classdata;
  if 0 then set have(keep=ServiceId region);
  do ServiceId =1 to 4;
    do Region1 = 1 to 2;
      output;
    end;
  end;
run;

制作CLASSDATA的另一种简便方法是在单个列表中的PROC SQL中使用完全连接。

proc sql;
  create table classdata as select * 
  from (select distinct serviceid from master_list_of_service_ids)
     , (select distinct region1 from master_list_of_regions)
  ;
quit;

然后将其传递给PROC Summary / Means。

proc summary data=have classdata=classdata nway;
  class Region1 ServiceID ;
  var total;
  output out=want sum= ;
run;

结果:

                  Service
Obs    Region1       ID      _TYPE_    _FREQ_    Total

 1        1          1          3         1        50
 2        1          2          3         1        60
 3        1          3          3         0         .
 4        1          4          3         0         .
 5        2          1          3         1        70
 6        2          2          3         0         .
 7        2          3          3         0         .
 8        2          4          3         0         .

答案 1 :(得分:1)

SUMMARY过程文档将显示选项MISSING

  

控制分类级别
  …
  缺少
  使用缺失值作为有效值来创建类变量的组合

proc summary data=… missing ;
run;

您还可以在CLASS语句中使用相同的选项来指定一个或多个变量以将missing用作分类级别。

  CLASS ServiceID / MISSING;