Sas 如何以特定的方式转置表
这是一些示例数据,实际数据更复杂,其他字段和大约40000个观察值,每个id最多180个值(我知道我将在转置表中获得360行,但这没关系): 我希望它以这种方式进行转置,所以我有lastname,然后交替使用firstname和value作为匹配lastname的服务器行。 需要数据:Sas 如何以特定的方式转置表,sas,Sas,这是一些示例数据,实际数据更复杂,其他字段和大约40000个观察值,每个id最多180个值(我知道我将在转置表中获得360行,但这没关系): 我希望它以这种方式进行转置,所以我有lastname,然后交替使用firstname和value作为匹配lastname的服务器行。 需要数据: Lastname Firstname1 Value1 Firstname2 value2 Firstname3 Value3 firstname4 value4 miller george 4
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
但我想我可以用它……用谷歌搜索一个名为“翻转/转置数据的更好方法”的宏。它正是为此而设计的。谷歌推出了一款名为“翻转/转置数据的更好方法”的宏。它正是为此而设计的。