0

我需要 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 值。

请帮助我。

数据示例:Paid 文本

4

4 回答 4

2

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

于 2011-11-07T15:06:53.223 回答
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;

在代码的开头..

于 2011-09-26T15:35:38.693 回答
0

尝试按 patid n 数据编号(数据编号前的 n)对数据集进行排序。和 proc 转置“by patib n”;

于 2022-02-08T13:12:50.157 回答
0

尝试按 patid text n datanumber(n 在 datanumber 之前)对数据集进行排序。

于 2022-02-08T13:08:08.853 回答