2016-04-30 71 views
0

我有一个表显示3 obs和4字段(ID姓,名和电话号码)为每个ID和我更喜欢转置姓氏到3字段和名字字段,我想只保留与姓氏和电话号码相关联的姓名,我只想保留与第三(姓氏)姓氏相关的姓名。移调数据,只保留需要obs

Table: 

ID Lastname FirstName TelephoneNumber 
001 Y  A   123 
001 W  B   345 
001 Z  C   567 
002 M  D   789 
002 N  E   912 
002 L  F   934 



Table want: 
ID LastName_1 LastName_2 LastName_3 FirstName TelephoneNumber 
001 Y   W   Z   A   567 
002 M   N   L   D   934 

任何人都可以帮忙吗?

+0

到目前为止您尝试过了什么?你应该表现出一些自己的努力。确保你已经阅读:http://stackoverflow.com/help/how-to-ask – tfv

+0

我试过的代码是先用姓氏和合并将它们分开。这种方法起作用。但我只是想更有效率。 – jen

回答

0

您可以使用PROC SUMMARY IDGROUP来做到这一点。我会留给你研究语法。

data id; 
    input (ID Lastname FirstName)(:$3. 2*:$1.) TelephoneNumber; 
    cards; 
001 Y  A   123 
001 W  B   345 
001 Z  C   567 
002 M  D   789 
002 N  E   912 
002 L  F   934 
;;;; 
    run; 
proc print; 
    run; 
proc summary nway; 
    class id; 
    output 
     out=id2 
     idgroup(out(firstname)=) 
     idgroup(last out(telephonenumber)=) 
     idgroup(out[3](lastname)=) 
     ; 
    run; 
proc print; 
    run; 
+0

谢谢。如果我想将这个输出数据用作其他输入,代码应该如何? – jen

+0

@jen我修改了输出语句以包含OUT =选项来命名由OUTPUT语句创建的数据集。 –

+0

谢谢。如果有更多的字段(例如,地址,省),地址遵循与firstname相同的规则,并且省份正在将销售规则作为电话号码,那么代码将如何更改? – jen