2

我提出的另一个 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   |

有没有办法获得第一个所需的输出?

4

2 回答 2

3

假设您熟悉将ODS其导入 Excel 的选项(我只是懒惰地使用 html 并将其保存为 .xls,但您可以使用标签集等代替),这里是一种PROC REPORT以格式显示数据的解决方案您正在寻找。查看acrossproc 报告中变量的使用情况。可能有一种方法可以抑制输出中 cat1 下未使用的列,但我现在不记得了。

数据测试数据;
  infile 数据线 dsd delimiter='|';
  输入名称$类别$等级分数;
  数据线;
约翰 | 猫1 | 1 | 80
约翰 | 猫1 | 2 | 70
约翰 | 猫1 | 3 | 10
约翰 | 猫2 | 1 | 60
约翰 | 猫2 | 2 | 95
约翰 | 猫2 | 3 | 43
约翰 | 猫2 | 4 | 28
;
跑;

ods html 文件="C:\SomePath\MyFile.xls";

过程报告
  数据=测试数据;
  列名称类别、级别、分数;
  定义名称/组;
  定义类别/跨'';
  定义级别/跨'';
  定义分数/总和'';
跑;

ods html 关闭;
于 2011-05-06T04:47:09.180 回答
1

我认为您无法使用 proc transpose 直接转到所需的输出,因为您希望每个类别跨越多个级别。您可能想要研究另外两个过程,REPORT 和 TABULATE。我相信您可以直接从其中任何一个中执行此操作,但是自从我使用这些以来已经有好几年了。第三种选择是使用 ODS 创建一个 XML 文件,您可以在其中几乎准确地控制您希望输出的显示方式,尽管学习如何执行此操作需要更多的努力。

于 2011-05-05T21:22:48.297 回答