【发布时间】:2020-08-20 18:18:58
【问题描述】:
我在 SAS 中有一个大型数据集,需要将其从 long 更改为 wide。
基本上,数据是根据每个属性的多个观测值进行排序的,这些观测值大约 10 个不同的年份,包含大约 150 个变量。我想这样做,所以每个变量都是不同的年份,并且每个属性都有一个观察值。每个变量都有唯一的名称,我想将名称保留在其中。
我有什么:
属性 年份 Var1 ... Var150
Prop 1 2010 100 ... ABC
Prop 1 2011 101 ... DEF
.
.
Prop 1 2017 138 ... XYZ
Prop2 ...
我想要什么:
属性 Var1_2010 ... Var1_2017 ... Var150_2010 ... Var150_2017强>
Prop1 100 ... 138 ... ABC ... XYZ
Prop2 ...
我尝试使用 Proc Transpose,但找不到在每个原始变量名称末尾连接年份的方法。
我也试过了:
proc sort data=hotels;
by propertyID year;
run;
proc transpose data=hotels out=hotels_wide;
by propertyID year;
var _all_;
run;
proc transpose data=hotels_wide delimiter=_ out=hotels_wide_full(drop=_name_);
by propertyID;
var col1;
id _name_ year;
run;
但最后一个块给了我一个错误,告诉我每个 propertyID 的每个变量多次出现。这样做的一个缺点是会丢失每个变量的格式。
【问题讨论】:
-
您发布的代码将起作用。您能否提供不起作用的示例数据?
-
发布的代码会产生该错误的唯一原因是,如果现有变量的名称太长,以至于添加额外的字符来存储年份值将不符合 32 个字符的限制变量名。