扩展列表以包括 SAS 中的因子转换

extend list to include factor transforms in SAS

我有这样的数据集

data have;
input ID Label;
datalines;
Factor_1 Assets
Factor_2 Liabilities
Factor_3 Bonds
;
run;

我正在寻找一个新的数据集来适应因子转换,因此我需要更新我的字典

data want;
input ID Label;
datalines;
Factor_1_log Assets_log
Factor_1_sq Assets_sq
Factor_2_log Liabilities_log
Factor_2_sq liabilities_sq
;
run;

到目前为止我已经试过了

data want;
set have;
by ID;
if first.ID then do;
output;
ID = ID||_log;
output;
ID = ID||_sq;
output;
end;
run;

但是没有用,有没有办法扩展我的列表并附加正确的短语?

首先,字符串文字需要用引号引起来。所以你想使用 '_sq' 而不是 _sq。如果没有引号,SAS 将假定 _sq 是变量的名称。

SAS 字符变量也是固定长度的,因此使用简单的连接运算符 || 在空格后附加后缀。然后尝试将结果写回同一个变量将丢失后缀,因为它不适合变量。

您不需要为此使用 BY 处理。您正在将每一行扩展为多行。

data want;
  set have;
  output;
  length suffix  ;
  do suffix='log','sq';
    id = catx('_',id,suffix);
    label = catx('_',label,suffix);
    output;
  end;
  drop suffix;
run;

如果您不想保留原始观察结果,请删除 do 循环之前的 output 语句。

@Tom 的方法是最好的,只是 SQL

中的另一种方法
proc sql;
create table want as 
 select cats(id,newcol) as id, cats(label,newcol) as label from 
       (select * from have)a
        cross join
       (select distinct '_log' as newcol from have
       union 
       select distinct '_sq' as newcol from have)b;