在SAS中转置/添加新的列

时间:2016-08-30 16:21:29

标签: sas enterprise-guide

我在SAS中有这些数据:

+-----------+-------+
| PartnerNo | SAPNo |
+-----------+-------+
| P1        |   123 |
| P1        |   124 |
| P1        |   125 |
| P2        |   126 |
| P2        |   127 |
| P3        |   128 |
+-----------+-------+

现在我希望每个合作伙伴都有一行,每个SAPNo需要一个新列。 像这样:

+-----------+------+------+------+
| PartnerNo | SAP1 | SAP2 | SAP3 |
+-----------+------+------+------+
| P1        |  123 |  124 |  125 |
| P2        |  126 |  127 |      |
| P3        |  128 |      |      |
+-----------+------+------+------+

这需要是动态的。每个PartnerNo最多可以有8个SAPNo。

我正在使用SAS Enterprise Guide 5.1

1 个答案:

答案 0 :(得分:0)

Proc transpose功能强大,但不那么直观。 这是溶剂:

proc transpose prefix=SAP
    data=iHave
    out=iNeed (drop=_name_);

    by PartnerNo;
    var SAPNo;
run;

当然data指定输入和out输出。

var SAPNo指定您希望该变量的值列在列中。

SAS程序通常会生成文档变量,并附在底层。 Proc transposem for instandce,创建一个_name_字段。如果指定多个变量sin var语句,则该过程将为每个id变量生成多行。然后,此_name_指示值的来源。我们不需要它,所以我们放弃它。或者,我们可以删除所有带有drop=_:下划线的变量。如果您不需要任何文档变量,这对于生成多个文档变量的过程非常有用。

默认情况下,这些colomns名为col1col2等。我使用prefix选项对其进行了更改。通常这不是您想要的,因为目标列在另一个变量中命名。然后是enter image description here

by PartnerNo指定您想要一个新的观察(或行,如果您更喜欢数据库词汇而不是SAS词汇表) for eacht value that variable