作者imaltar (..)
标题Re: [程式] SAS call symput如何不要只看最後一列
时间Thu Jun 16 23:27:43 2016
※ 引述《》之铭言:
: [程式问题]:
: call symput
: [软体熟悉度]:
: 中等
: [问题叙述]:
: 请问我有一组数据如下,每个ID各有Q1~Q3三个变数,栏位string说明要把
: 哪几个变数相加
: ID Q1 Q2 Q3 string
: 1 3 1 2 sum(Q2,Q3)
: 2 1 2 3 sum(Q1,Q2,Q3)
: 3 4 1 3 sum(Q1,Q2)
: 现在希望增加一栏位score,依照string的指示来加总可以得到如下的值
: ID score
: 1 3
: 2 6
: 3 5
: 目前利用call symput程式如下,但会变成每个人的score都统一以最後一人(ID3)的
: string为准,即每个人的score都是Q1+Q2
: Data compute;
: set data1;
: call symput('sum', string);
: score = ∑
: Run;
: ID score(错)
: 1 4
: 2 3
: 3 5
: 想请板上高手指点一下,该怎麽修正? 谢谢
: ※ 编辑: edsmom (211.76.175.169), 06/16/2016 13:59:39
data data1;
length ID Q1 Q2 Q3 8. string $15;
input ID Q1 Q2 Q3 string;
cards;
1 3 1 2 sum(Q2,Q3)
2 1 2 3 sum(Q1,Q2,Q3)
3 4 1 3 sum(Q1,Q2)
4 2 2 3 sum(Q1,Q2)
5 1 3 2 sum(Q1,Q2,Q3)
;
run;
%macro aa;
/*列出加总的总类*/
proc sql noprint;
create table string as
select distinct string
from data1;
/*计算加总的总类的个数*/
select count(*) into: n_string
from string;
quit;
data string;set string;
n=_n_;
run;
data compute;delete;
%do i=1 %to &n_string.;
proc sql noprint;
select string into:sum
from string
where n=&i.;
data temp;set data1;
/*只要string符合该加总的类别, 即进行该形式的加总*/
if string="&sum";
score =∑
run;
data compute;set compute temp;run;
%end;
%mend;
%aa;
你的data应该是有大量id, 试看看能否直接适用各种情形~~~
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.250.158.190
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Statistics/M.1466090865.A.14C.html
1F:→ edsmom: 谢谢i大,我试看看,再上来回报 06/17 11:08
2F:推 edsmom: 嗯,对。我有大量ID, 而且实际上有Q1~Q60个变数~ 06/17 11:10