在 SAS 中使用循环创建 Table
Create Table with Loop in SAS
当你有 table 个赞时;
somefield1 somefield2 lastterm1 lastterm2
(10) (20) (1) (-)
(20) (40) (1) (2)
(30) (50) (-) (2)
并尝试对每个术语进行分组,有没有更简单的方法而不是;
PROC SQL;
CREATE TABLE WORK.LAST_TERM1 AS
SELECT T1.LASTTERM1,
(MEAN(t1.'somefield1'n)) FORMAT=COMMAX14.2 AS 'MEAN_of_somefield1'n,
(MEAN(t1.'somefield2'n)) FORMAT=COMMAX14.2 AS 'MEAN_of_somefield2'n
FROM WORK.MAIN_TABLE t1
GROUP BY t1.LASTTERM1;
RUN;
PROC SQL;
CREATE TABLE WORK.LAST_TERM2 AS
SELECT T1.LASTTERM2,
(MEAN(t1.'somefield1'n)) FORMAT=COMMAX14.2 AS 'MEAN_of_somefield1'n,
(MEAN(t1.'somefield2'n)) FORMAT=COMMAX14.2 AS 'MEAN_of_somefield2'n
FROM WORK.MAIN_TABLE t1
GROUP BY t1.LASTTERM2;
RUN;
两个字段和两个术语没有问题,但是当您有 20 个术语和 200 个字段时,此代码无效。
我试过但失败了,比如 for 1 to 20 do this and create all tables.
有什么办法吗?
我认为您正在寻找 proc 手段。您可以使用 sas-macro 替换输出 table 和 class 变量的名称来遍历分组变量列表(即 lastterm1、lastterm2),并且应该拥有您需要的一切。
这是一个简单的宏,可用于 last_term1 - last_term20。有点不清楚你到底想要什么,所以这是一个基本的通用形式。
%macro looper();
%do i = 1 %to 20;
proc means data=WORK.MAIN_TABLE;
var somefield1 somefield2;
class lastterm&i.;
output out=WORK.LAST_TERM&i.
mean(somefield1) = MEAN_of_somefield1
mean(somefield2) = MEAN_of_somefield2;
run;
%end;
%mend;
%looper();
当你有 table 个赞时;
somefield1 somefield2 lastterm1 lastterm2
(10) (20) (1) (-)
(20) (40) (1) (2)
(30) (50) (-) (2)
并尝试对每个术语进行分组,有没有更简单的方法而不是;
PROC SQL;
CREATE TABLE WORK.LAST_TERM1 AS
SELECT T1.LASTTERM1,
(MEAN(t1.'somefield1'n)) FORMAT=COMMAX14.2 AS 'MEAN_of_somefield1'n,
(MEAN(t1.'somefield2'n)) FORMAT=COMMAX14.2 AS 'MEAN_of_somefield2'n
FROM WORK.MAIN_TABLE t1
GROUP BY t1.LASTTERM1;
RUN;
PROC SQL;
CREATE TABLE WORK.LAST_TERM2 AS
SELECT T1.LASTTERM2,
(MEAN(t1.'somefield1'n)) FORMAT=COMMAX14.2 AS 'MEAN_of_somefield1'n,
(MEAN(t1.'somefield2'n)) FORMAT=COMMAX14.2 AS 'MEAN_of_somefield2'n
FROM WORK.MAIN_TABLE t1
GROUP BY t1.LASTTERM2;
RUN;
两个字段和两个术语没有问题,但是当您有 20 个术语和 200 个字段时,此代码无效。
我试过但失败了,比如 for 1 to 20 do this and create all tables.
有什么办法吗?
我认为您正在寻找 proc 手段。您可以使用 sas-macro 替换输出 table 和 class 变量的名称来遍历分组变量列表(即 lastterm1、lastterm2),并且应该拥有您需要的一切。
这是一个简单的宏,可用于 last_term1 - last_term20。有点不清楚你到底想要什么,所以这是一个基本的通用形式。
%macro looper();
%do i = 1 %to 20;
proc means data=WORK.MAIN_TABLE;
var somefield1 somefield2;
class lastterm&i.;
output out=WORK.LAST_TERM&i.
mean(somefield1) = MEAN_of_somefield1
mean(somefield2) = MEAN_of_somefield2;
run;
%end;
%mend;
%looper();