我在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
答案 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名为col1
,col2
等。我使用prefix
选项对其进行了更改。通常这不是您想要的,因为目标列在另一个变量中命名。然后是。
by PartnerNo
指定您想要一个新的观察(或行,如果您更喜欢数据库词汇而不是SAS词汇表) for eacht value that variable