作者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/m.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