原始数据
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;
答案 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;