SAS proc转置并输出为excel

从我的另一个SAS问题(我注意到这些经常不会出现在这里):

我有一个数据集包含这样的东西:

Name | Category | Level | Score John | cat1 | 1 | 80 John | cat1 | 2 | 70 John | cat1 | 3 | 10 John | cat2 | 1 | 60 John | cat2 | 2 | 95 John | cat2 | 3 | 43 John | cat2 | 4 | 28 

输出(excel格式)应该如下所示:

  | cat1 | cat2 | name | 1 | 2 | 3 | 1 | 2 | 3 | 4 | John | 80 | 70 |10 |60 |95 |43 |28 | 

我现在所做的就是使用proc transpose以正确的顺序获取数据,然后proc export到.xls。

这工作正常,除了一件事。 我不能得到第二层的细分工作。 所以现在,在我的proc transpose之前,我实际上是在我的数据集中(例如,使其成为'1_cat1')连接我的类别和级别,然后转置这个值,给我以下输出:

 name | 1_cat1 | 2_cat1 | 3_cat1 | 1_cat2 | 2_cat2 | 3_cat2 | 4_cat2 | John | 80 | 70 | 10 | 60 | 95 | 43 | 28 | 

有没有办法获得第一个期望的输出?

假设你熟悉你的ODS选项,把它放到Excel中(我只是懒惰的使用HTML并将它保存为.xls,但你可以使用标记集等代替),这里是一个PROC REPORT解决scheme来显示数据在你正在寻找的格式。 检查proc报告中acrossvariables的使用。 可能有一种方法可以在输出中禁止在cat1下使用的列,但现在我不记得它了。

 数据testing数据;
   infile datalines dsd delimiter ='|';
  input名称$ category $等级分数;
   datalines;
约翰|  cat1 |  1 |  80
约翰|  cat1 |  2 |  70
约翰|  cat1 |  3 |  10
约翰|  cat2 |  1 |  60
约翰|  cat2 |  2 |  95
约翰|  cat2 |  3 |  43
约翰|  cat2 |  4 |  28
 ;
跑;

 ods html file =“C:\ SomePath \ MyFile.xls”;

 proc报告
  数据= TESTDATA;
  栏目名称分类,等级,分数;
  定义名称/组;
  定义类别/横跨“;
  定义水平/横跨“;
  定义分数/总和“;
跑;

 ods htmlclosures; 

我不认为你将能够使用proc转置直接到你想要的输出,因为你正在寻求让每个类别跨越多个层次。 你可能想研究另外两个程序,REPORT和TABULATE。 我相信你可以直接从任何一个这样做,但是我用这些已经有好几年了。 第三个选项是创build一个ODS的XML文件,在这个文件中,你可以非常准确地控制你要输出的样子,尽pipe要花费更多的精力来学习如何做到这一点。