在具有多个变量的SAS中从长到宽重塑大型数据集
我在SAS中有一个很大的数据集,需要从长数据集改为宽数据集 基本上,这些数据是通过对每个地产的10个不同年份的多个观测值进行排序的,大约有150个变量。我想让每个变量都是不同的年份,每个属性有一个观察值。每个变量的名称都是唯一的,我希望将名称保留在其中 我所拥有的: 地产年度Var1Var150 道具1 2010 100。。。ABC 2011 101号提案。。。DEF 2017年1号提案138。。。XYZ 建议2 我想要的是: 地产Var1_2010Var1_2017Var150_2010Var150_2017 建议1100。。。138 ... ABC。。。XYZ 建议2 我尝试使用Proc转置,但我找不到一种方法将年份连接到每个原始变量名的末尾 我还尝试:在具有多个变量的SAS中从长到宽重塑大型数据集,sas,reshape,Sas,Reshape,我在SAS中有一个很大的数据集,需要从长数据集改为宽数据集 基本上,这些数据是通过对每个地产的10个不同年份的多个观测值进行排序的,大约有150个变量。我想让每个变量都是不同的年份,每个属性有一个观察值。每个变量的名称都是唯一的,我希望将名称保留在其中 我所拥有的: 地产年度Var1Var150 道具1 2010 100。。。ABC 2011 101号提案。。。DEF 2017年1号提案138。。。XYZ 建议2 我想要的是: 地产Var1_2010Var1_2017Var150_2010V
proc sort data=酒店;
按物业类别划分的年份;
跑
proc转置数据=酒店外=酒店范围;
按物业类别划分的年份;
var u all u;
跑
proc transpose data=hotels\u wide delimiter=\uuu out=hotels\u wide\u full(drop=\u name\uu);
按财产分类;
col1变种;
id(姓名)年份;;
运行代码>我认为PROC转置在这里确实有效。这似乎对我有用,但我可能遗漏了你的代码
我首先将其转换为更长的格式,这样您就有了一列包含年份和房产ID的数据。然后我再次将其转换为所需的宽格式
只要你每年只有一排房子,这就行了。如果它出错了,那么出于某种原因SAS认为变量有多年的时间,这是有问题的,因为您不能有两次Var4_2010和Var4_2010,那么第二次迭代应该如何命名?在这种情况下,您要么汇总然后转置,要么需要添加另一个变量来唯一标识行
data propertyData;
array _var(*) var1-var5;
do property=1 to 5;
do year=2010 to 2015;
do i=1 to dim(_var);
_var(i)=rand('normal', 100, 5);
end;
output;
end;
end;
keep property year var1-var5;
run;
proc transpose data=propertyData out=long;
by property year;
var var1-var5;
run;
proc transpose data=long out=wide delimiter = _;
by property;
id _name_ year;
var col1;
run;
您发布的代码将起作用。您能提供不起作用的示例数据吗?发布的代码生成该错误的唯一原因是,如果存在名称太长的现有变量,添加额外字符来存储年份值将不符合变量名称的32字符限制。有趣!我不知道。是的,这更简洁:)