我需要 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 值。
请帮助我。
数据示例: 耐心的文字
当您收到该错误时,它告诉您您尝试创建的一个或多个变量有多个数据点。如果您将“let”添加到 proc 转置行,SAS 可以强制转置并删除额外的数据点。
您的数据可能不是唯一的?我创建了一个数据集(具有 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;
在代码的开头..
尝试按 patid 文本 n 数据编号(n 在数据编号之前)对数据集进行排序。
尝试按 patid n datanumber(n 在 datanumber 之前)对数据集进行排序。和 proc 转置“by patib n”;
如果数据不唯一,另一种解决方法是添加行号字段,以便有一个可以排序和分组的唯一标识符。