在SAS中,我需要在PROC TABULATE
处重复标签,以便在Excel上更容易使用INDEX-MATCH查找它们。这是sashelp.cars的示例。
第一个PROC TABULATE具有重复标签的优点,这是INDEX-MATCH所需的。但是,它的缺点是SAS仅提供非缺失值。
data cars;
set sashelp.cars;
run;
proc sort data=cars;
by make;
run;
这不会提供所有标签。我想要一张按列(欧洲,亚洲,美国)和每种汽车类型(轿车,SUV,旅行车,运动车...)按大洲划分的表格。
PROC TABULATE DATA = cars;
option missing=0;
by make;
CLASS make type Type Origin / mlf MISSING ;
TABLE (
(type*make)
), (Origin='') / printmiss nocellmerge ; RUN;
因此,为了让所有三大洲都拥有哥伦布和每种类型的汽车(轿车,SUV,旅行车,运动车...),我建议使用CLASSDATA:
Data level;
set cars;
keep make type Type Origin;
Run;
PROC TABULATE DATA = cars MISSING classdata=level;
option missing=0;
by make;
CLASS make type Type Origin / mlf MISSING ;
TABLE (
(make*type)
), (Origin='') / printmiss nocellmerge ;
RUN;
Data level;
set cars;
keep make type Type Origin;
Run;
PROC TABULATE DATA = cars MISSING classdata=level;
option missing=0;
by make;
CLASS make type Type Origin / mlf MISSING ;
TABLE (
(make*type)
), (Origin='') / printmiss nocellmerge ;
RUN;
但是,这给出了一张巨大的表格,并且没有重复的标签。有中途解决方案:
非常感谢您,
答案 0 :(得分:1)
proc tabulate
的列表导出到excel proc tabulate
不会在第二列中的每个值上重复第一列中的值,因为输出是供人阅读的。这不是您需要将数据写入excel以便进行进一步查找的工具。
MATCH
,而是使用SUMIFS
MATCH
在excel中是一个很棒的功能,但对于您的应用程序来说不是一个很好的选择,因为
create table
PROC sql;
create table TO_EXPORT as
select REGION, MACTIV, DATE, count(*) as cnt
from data
group by REGION, MACTIV, DATE;
proc export data = TO_EXPORT file="&myFolder\&myWorkbook..xlsx" replace;
RUN;
您将在Excel中以更加面向数据的格式存储数据。
要检索数据,我建议使用以下类型的excel公式
=sumifs($D:$D,$A:$A,"13-*",$B:$B,$C:$C,"apr2020")`
它将所有计数添加到您要查找的标准左边。 因为最多只有一行符合这些条件,所以它实际上只是查找您要查找的计数。 如果该计数不存在,它将仅返回零。
免责声明: 我没有测试此代码,所以如果它不起作用,请发表评论,我会的。