Proc转置额外的列?

Proc transpose extra columns?

我有一组数据,我从中提取了 id 和 reason_cd。可能有多种原因,因此存在重复的 ID。由于原因,我想将其转置为每个 Id 一行和多列。

使用下面的作品。但是,NameLabel 会弹出两列,每个 Id 的值为 'reason_cd'。为什么会有这些,是否可以在不执行另一个数据步骤来删除它们的情况下将它们删除?

proc transpose data=aars out=test prefix=decline_reason;
by ID;
var reason_cd;
run;

_NAME_ 变量具有原始变量的名称(当您使用 PROC TRANSPOSE 从多个变量转换为多个行时很有用)。只有在一个或多个转置变量附加了标签时,_LABEL_ 变量才会出现。

因此使用 DROP= dataset 选项删除_NAME_变量。使用 LABEL 语句从变量中删除标签将删除 _LABEL_ 变量。

proc transpose data=aars out=test(drop=_name_) prefix=decline_reason;
  by ID;
  var reason_cd;
  label reason_cd=' ';
run;

如果您需要更多控制,请使用数据步骤对我们的转置算法进行编码。

data want;
  do index=1 to 4 until(last.id);
    set aars end=eof; 
    by id; 
    array decline_reason [4] 8; 
    decline_reason[index]=reason_cd; 
  end; 
  drop reason_cd index ;
run; 

如果 REASON_CD 是字符而不是数字,则将 ARRAY 语句将用于创建新变量的长度规范从 8 更改为 $ 后跟所需的长度。