这是一个SAS新手的问题。我有一个数据集,包含数值变量v1-v120
、V
和分类变量Z
(比如说有三个可能的值)。对于Z
的每个可能值,我想得到另一组变量w1-w120
,其中w{i}=sum(v{i}}/V
,其中和是给定值Z
的和。因此,在这种情况下,我正在寻找3*120矩阵。我可以在数据步骤中做到这一点,但希望通过Proc SQL
或Proc MEANS
来做到,因为实际数据集中的分类变量数量适中。提前谢谢。
这里有一个使用proc-sql的解决方案。您可能还可以使用proc做类似的事情,即使用输出数据集和"by"语句。
data t1;
input z v1 v2 v3;
datalines;
1 2 3 4
2 3 4 5
3 4 5 6
1 7 8 9
2 4 7 9
3 2 2 2
;
run;
%macro listForSQL(varstem1, varstem2, numvars);
%local numWithCommas;
%let numWithCommas = %eval(&numvars - 1);
%local i;
%do i = 1 %to &numWithCommas;
mean(&varstem1.&i) as &varstem2.&i,
%end;
mean(&varstem1.&numvars) as &varstem2.&numvars
%mend listForSQL;
proc sql;
create table t2 as
select
z,
%listForSQL(v, z, 3)
from t1
group by z
;
quit;
使用proc means
很容易做到这一点。使用Louisa Grey答案中的t1
数据集:
proc means data=t1 nway noprint;
class z;
var v1-v3;
output out=t3 mean=w1-w3;
run;
这将创建一个与SQL结果匹配的结果表。