SAS:转换Transpose还是SQL?

时间:2016-01-24 19:22:38

标签: sql sas transpose

我还有一个问题。我目前有一个相当大的数据集,如下所示:

Rank  Count  Score
1      100    10
Romeo & Juliet .  .
Shakespeare .  .

我需要以某种方式维护排名,计数和分数(1,100,10),并为该书的名称和作者的另一列创建一个新列。

在SAS中有一个很好的方法吗?我正在画一个空白,任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

首先,在我给出答案之前,获得具体答案的关键是提出一个精确而详细的问题。

从你不精确的问题和评论中,我想我拼凑了你的问题。事实上,这是我过去遇到过的。

您在评论中说,数据位于csv文件中,但您的示例似乎在尝试导入后显示数据。根据您的描述,单个观察点分布在csv中的3行数据中。我假设数据看起来像是这样(我组成了第二个障碍物):

1,100,10
Romeo & Juliet
Shakespeare
2,90,9
The Old Man and the Sea
Hemingway

以下是将文件读取为结构化的数据步骤。

data books;
infile '/folders/myfolders/books.csv' dlm=',' n=3 truncover;
input rank score count #2 book $50. #3 author $30.;
run;

首先,让我解释infile声明中的选项。选项n=3指定输入缓冲区中有3行输入数据,这与构成单个obs所需的行数相对应。我们将在input语句中利用此选项。 truncover选项可确保SAS不会继续读取值超过指定长度的变量的行尾。例如,这个选项允许我为书名称分配50个字符长度的信息,即使书名比那个短得多。

让我们继续input语句。读取排名,得分和计数没有什么特别之处,因为每个3行组的第一行是标准的逗号分隔数据。 #2符号告诉SAS移动到3行组的第2行以阅读书名。当然,#3将行指针移动到3行组的最后一行,以读取最终变量作者。

这是最终输出的样子:

enter image description here