proc 转置重复的 ID 值

问题描述 投票:0回答:5

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

请帮助我。

数据示例: 耐心的文字

sas transpose proc-sql
5个回答
3
投票

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


1
投票

您的数据可能不是唯一的?我创建了一个数据集(具有 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;

在代码的开头..


0
投票

尝试按 patid 文本 n 数据编号(n 在数据编号之前)对数据集进行排序。


0
投票

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


0
投票

如果数据不唯一,另一种解决方法是添加行号字段,以便有一个可以排序和分组的唯一标识符。

© www.soinside.com 2019 - 2024. All rights reserved.