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报告中across
variables的使用。 可能有一种方法可以在输出中禁止在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要花费更多的精力来学习如何做到这一点。