使用SAS中的PROC TABULATE的带有重复标签的标准化表格

时间:2020-06-15 13:48:05

标签: excel sas tabulate

在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;

但是,这给出了一张巨大的表格,并且没有重复的标签。有中途解决方案:

  1. 所有列(3个大洲)都像上一张表一样
  2. 只有相关的MAKE,即Ac歌的前6行
  3. 重复的标签,例如第一个PROC TABULATE

非常感谢您,

1 个答案:

答案 0 :(得分:1)

我建议不要将proc tabulate的列表导出到excel

proc tabulate不会在第二列中的每个值上重复第一列中的值,因为输出是供人阅读的。这不是您需要将数据写入excel以便进行进一步查找的工具。

我建议不要使用MATCH,而是使用SUMIFS

MATCH在excel中是一个很棒的功能,但对于您的应用程序来说不是一个很好的选择,因为

  • 找不到所需内容时会出错,这就是为什么您需要输出中所有标签的原因
  • 它仅支持一个条件,因此您至少需要3个条件
  • 它返回一个头寸,因此您仍然需要一个索引函数。

因此,我建议写一个简单的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")`

它将所有计数添加到您要查找的标准左边。 因为最多只有一行符合这些条件,所以它实际上只是查找您要查找的计数。 如果该计数不存在,它将仅返回零。

免责声明: 我没有测试此代码,所以如果它不起作用,请发表评论,我会的。

相关问题