2011-08-11 39 views
0

我需要SAS中proc转置过程的帮助。我的代码最初是:proc转置带有重复的ID值

proc transpose data=temp out=temp1; 
by patid; 
var text; 
Id datanumber; 
run; 

这给了我错误“ID值”“在同一个BY组中出现两次”。我修改了代码,以这样的:

proc sort data = temp; 
by patid text datanumber; 
run; 

data temp; 
set temp by patid text datanumber; 
if first.datanunmber then n = 0; 
n+1; 
run; 

proc sort data = temp; 
by patid text datanumber n; 
run; 

proc transpose out=temp1 (drop=n) let; 
by patid; 
var text; 
id datanumber; 
run; 

这是给我的错误:变量n不被认可。添加let选项会导致很多错误,“在同一BY组中发生两次”。我想保留所有的id值。

请帮我这个。

数据举例: Patid文本

+0

Nupur,你能举一个你的数据的例子吗?我无法复制你的错误。 – RWill

+0

当然。我正在试图在这里制作一张小桌子,向您展示我的数据如何,但我无法做到这一点。你能告诉我我该怎么做? – Nupur

+0

只是简单的东西,如: options obs = 10; proc print data = temp; var patid文本数据编号; – RWill

回答

0

您的数据可能是不是唯一的?我创建了一个数据集(与patid和datanumber的唯一值)和转置的工作原理:

data temp (drop=x y); 
do x=1 to 4; 
    PATID='PATID'||left(x); 
    do y=1 to 3; 
     DATANUMBER='DATA'||left(y); 
     TEXT='TEXT'||left(x*y); 
     output; 
    end; 
end; 
proc sort; by _all_; 
proc transpose out=temp2 (drop=_name_); 
    by patid; 
    var text; 
    id datanumber; 
run; 

我的建议是忘记“N”修复并专注于制作独特的patid和datanumber,脏数据方法是:

proc sort data = temp nodupkey; 
by patid datanumber; 
run; 

在你的代码的开始..

2

当你得到这个错误是告诉你,你有一个或多个变量,你要创建多个数据点。如果向proc转置行添加“let”,SAS可以强制转置并删除额外的数据点。

+0

有关“LET”选项的说明,请参阅此处:http://support.sas.com/documentation/cdl/en/proc/65145/HTML/default/viewer.htm#p1r2tjnp8ewe3sn1acnpnrs3xbad.htm 举例:http://support.sas.com/documentation/cdl/en/proc/65145/HTML/default/viewer.htm#n0mwa670j36v2an1ojkae8e3d8sz.htm –