我有一个可能非常简单但我无法想象的问题。
我有列name1 c1 c2 c3 c4 .... c8
我必须按名称汇总这些列并创建新数据。
这是我写的代码,但它没有用。
你能帮我吗?
PROC SQL;
CREATE TABLE WORK.data1 AS
SELECT t1.name1,
%let k=8
%macro test;
%do i=0 %to &k;
%sysfunc(SUM(C&i)) AS C&i;
%END;
%mend test;
%test;
FROM WORK.data t1
GROUP BY t1.name1,
QUIT;
答案 0 :(得分:3)
data data;
input name1 $ c1 c2 c3;
datalines4;
a 1 2 3
a 1 2 3
b 1 2 3
b 1 2 3
;;;;
run;
%macro test(k=);
PROC SQL;
CREATE TABLE WORK.data1 AS
SELECT t1.name1
%do i=1 %to &k.;
, SUM(C&i.) AS C&i.
%END;
FROM WORK.data t1
GROUP BY t1.name1;
QUIT;
%mend test;
%test(k=3);
答案 1 :(得分:1)
这似乎是一种实现结果的复杂方式,PROC SUMMARY可以更轻松地利用冒号修饰符对以C开头的所有变量求和。下面的代码运行@Mike创建的数据集并产生相同的输出。
proc summary data=data nway;
class name1;
var c: ;
output out=want (drop=_:) sum=;
run;