【问题标题】:proc transpose with duplicate ID values具有重复 ID 值的 proc 转置
【发布时间】:2011-10-25 09:17:43
【问题描述】:

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

请帮帮我。

数据示例: 部分文字

【问题讨论】:

  • Nupur,你能举一个你的数据的例子吗?我无法复制您的错误。
  • 当然。我正在尝试在这里制作一个小表格,向您展示我的数据的外观,但我无法做到这一点。你能告诉我该怎么做吗?
  • 只是一些简单的东西,比如:options obs=10;过程打印数据=临时; var patid text datanumber;
  • Nupur,我仍然无法制作数据集来复制您的错误,但这里有一些建议。 1) 在第二个代码框中,您需要在 TEMP 数据集名称和 BY 语句之间添加一个分号。 2) 更正IF语句中FIRST.DATANUMBER的拼写。 3)您可能需要对您正在尝试的内容使用 RETAIN N 语句。如果您可以提供实际数据的示例,那么我们可以更好地诊断错误。
  • 您好 RWill 非常感谢您的回复。您的建议奏效了:)...我想将每个观察的所有内容放在一行中,以便每个 patid 将有一行与相关的数据编号。该代码已将我的数据转换为数据编号,现在作为变量,但我仍然拥有与之前 patid 相同的行数。数据编号(作为变量)的值在每个 patid 的不同行中。有没有办法解决这个问题?如果我没有以可以理解的方式解释它,请告诉我。再次感谢您的所有帮助

标签: sas transpose proc-sql


【解决方案1】:

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

【解决方案2】:

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

在代码的开头..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-12
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 2018-01-03
    • 2019-07-09
    相关资源
    最近更新 更多