proc sql中的sas宏

时间:2014-03-06 07:46:25

标签: sql macros sas proc

我有一个可能非常简单但我无法想象的问题。

我有列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;

2 个答案:

答案 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;