Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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 - Fatal编程技术网

Sas 如何以特定的方式转置表

Sas 如何以特定的方式转置表,sas,Sas,这是一些示例数据,实际数据更复杂,其他字段和大约40000个观察值,每个id最多180个值(我知道我将在转置表中获得360行,但这没关系): 我希望它以这种方式进行转置,所以我有lastname,然后交替使用firstname和value作为匹配lastname的服务器行。 需要数据: Lastname Firstname1 Value1 Firstname2 value2 Firstname3 Value3 firstname4 value4 miller george 4

这是一些示例数据,实际数据更复杂,其他字段和大约40000个观察值,每个id最多180个值(我知道我将在转置表中获得360行,但这没关系):

我希望它以这种方式进行转置,所以我有lastname,然后交替使用firstname和value作为匹配lastname的服务器行。 需要数据:

Lastname   Firstname1 Value1 Firstname2 value2 Firstname3 Value3 firstname4 value4
miller     george     47     george     45     henry      44     peter      45
smith      peter      42     frank      46

我尝试了一点proc transpose,但是我不能完全按照我想要的方式构建一个表,如上所述。我需要的want表正是这种方式(真实数据更复杂,并且有其他字段),因此请不要回答建议使用其他布局创建want表的问题。

proc summary
有一个非常有用的函数来实现这一点,
idgroup
。您需要指定每个lastname有多少个值,因此我包含了计算最大值的步骤

Data have;
input lastname $ firstname $ value;
datalines;
miller george 47
miller george 45
miller henry 44
miller peter 45
smith peter 42
smith frank 46
;
run;

/* get frequency count of lastnames */
proc freq data=have noprint order=freq;
table lastname / out=name_freq;
run;

/* store maximum into a macro variable (first record will be the highest) */
data _null_;
set name_freq (obs=1);
call symput('max_num',count);
run;

%put &max_num.;

/* transpose data using proc summary */
proc summary data=have nway;
class lastname;
output out=want (drop=_:)
            idgroup(out[&max_num.] (firstname value)=) / autoname;
run;

proc summary
有一个非常有用的功能来完成此操作,
idgroup
。您需要指定每个lastname有多少个值,因此我包含了计算最大值的步骤

Data have;
input lastname $ firstname $ value;
datalines;
miller george 47
miller george 45
miller henry 44
miller peter 45
smith peter 42
smith frank 46
;
run;

/* get frequency count of lastnames */
proc freq data=have noprint order=freq;
table lastname / out=name_freq;
run;

/* store maximum into a macro variable (first record will be the highest) */
data _null_;
set name_freq (obs=1);
call symput('max_num',count);
run;

%put &max_num.;

/* transpose data using proc summary */
proc summary data=have nway;
class lastname;
output out=want (drop=_:)
            idgroup(out[&max_num.] (firstname value)=) / autoname;
run;

感谢您提供此解决方案。我只有两个问题,但我想我可以解决。1.out[number]编号限制为100。
ERROR:参数值178不在所需的范围1和100。
我有一些ID值较多,但目前可以排除它们。2.变量顺序是
fn1 fn2。。。fn100值1值2。。。value100
但我认为我可以解决这个问题……感谢您提供了这个解决方案。我只有两个问题,但我想我可以解决。1.out[number]编号限制为100。
错误:参数值178不在所需的1和100范围内。
我有一些ID具有更多值,但我现在可以排除它们。2.变量顺序是
fn1 fn2。。。fn100值1值2。。。value100
但我想我可以用它……用谷歌搜索一个名为“翻转/转置数据的更好方法”的宏。它正是为此而设计的。谷歌推出了一款名为“翻转/转置数据的更好方法”的宏。它正是为此而设计的。