Sas 在proc summary中按两个类变量排序,包括所有缺少的类组合
原始数据Sas 在proc summary中按两个类变量排序,包括所有缺少的类组合,sas,Sas,原始数据 GrantNumber ServiceID Region1 Total 1 1 1 50 1 2 1 60 2 1 2 70 我需要输出包含缺少的类变量组合。然后,我希望根据这两个类变量ServiceID和Region1对输出进行排序 实例 ServiceID、Region1和T
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以与PrelofMT交互,并通过一个类变量对其进行排序,但它不起作用
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;
摘要程序文件将显示缺少的选项
控制分类级别
…
丢失的
使用缺少的值作为有效值来创建类变量的组合
您还可以使用CLASS语句上的相同选项指定一个或多个变量以将missing用作分类级别
CLASS ServiceID / MISSING;
看起来您需要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;
因此,创建一个包含所有组合的数据集
data classdata;
if 0 then set have(keep=ServiceId region);
do ServiceId =1 to 4;
do Region1 = 1 to 2;
output;
end;
end;
run;
制作类数据的另一个简单方法是在procsql中使用来自各个列表的完全连接
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 .
你看了我的真实要求了吗?你的回答不适用于我的问题,也不起作用。但是感谢您尝试@RichardSo的缺失,您并不是指数据中缺失值,而是指可能值列表中的值,但这些值恰好没有出现在这个数据样本中?为什么您同时使用by和CLASS?为什么不直接将SERVICEID添加到CLASS语句而不是使用BY语句?请包含示例数据,说明原始数据的结构和预期输出-我相信这是第一个表,但我编辑了您的帖子以使其易读。请确保您的问题格式正确,这有助于您获得更快的答案。我已经包括了一个原始数据@Reezaby missing的示例,我的意思是没有值的类的组合示例输出@Tomif Region1的最后两行是非数字字符变量,我需要为它们指定一个数字吗@托马诺。只需使用不同的方法创建CLASSDATA数据集。我只是使用了一个简单的DO循环,因为您的示例值是整数。如何确保在classdataset中包含missing。还有一件事,当我运行我的代码时,我得到了这个错误。在预加载数据集中找不到类变量Region2,或者与同名的主数据集变量不兼容@Tom您需要拥有所有的类变量。让我更新一下,以演示如何将多个单变量表转换为一个多变量类数据集。如果您想在CLASSDATA中包含missing,那么请使用与任何其他值相同的方法。但确保在PROC SUMMARY中使用MISSING选项,以便将实际数据中缺少的值包括在内。还是要求删除nWORE选项并包含不考虑所有类变量的摘要?我如何通过这个错误类变量区域1在预加载数据集中找不到,或者与名为“汤姆”的主数据集变量不兼容。