proc转置具有重复的ID值

时间:2011-08-11 21:47:39

标签: sas transpose proc-sql

我需要帮助SAS中的proc转置程序。我的代码最初是:

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 Text

2 个答案:

答案 0 :(得分:2)

当您收到该错误时,它会告诉您,您尝试创建的一个或多个变量有多个数据点。如果将“let”添加到proc转置行,SAS可以强制转置并删除额外的数据点。

答案 1 :(得分: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;

代码开头..