Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在具有多个变量的SAS中从长到宽重塑大型数据集_Sas_Reshape - Fatal编程技术网

在具有多个变量的SAS中从长到宽重塑大型数据集

在具有多个变量的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

我在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转置,但我找不到一种方法将年份连接到每个原始变量名的末尾

我还尝试:

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字符限制。有趣!我不知道。是的,这更简洁:)