作者imaltar (..)
站內Statistics
標題Re: [程式] SAS 資料比對合併問題
時間Sun Aug 14 16:28:16 2011
※ 引述《Maninck (我是大天才^o^/)》之銘言:
: [軟體程式類別]:
: SAS
: [程式問題]:
: 資料處理
: [軟體熟悉度]:
: 新手(不到1個月)
: [問題敘述]:
: 資料A 資料B
: I_CODE VALUE ID CODE KIND
: AA123 U 01 AA123 B
: AA123 C 02 BB123 C
: BB123 D 03 CC123 F
: CC123 U 04 DD123 N
: CC123 F 05 EE123 A
: FF123 D
: 資料C
: I_CODE VALUE ID
: AA123 B 01
: AA123 C 02
: BB123 D 03
: CC123 F 04
: CC123 F 05
: 我想要做出資料C
: 亦即,以資料A為主體,
: 如果I_CODE在資料B的CODE有找,而且資料A的VALUE是U
: 那麼就將資料B的KIND押到資料A的VALUE
: 我試著用merge和update玩玩看,但試不出來
: 有什麼建議的語法或方向嗎?
DATA A;INPUT I_CODE $ VALUE $ ID $;
CARDS;
AA123 U 01
AA123 C 02
BB123 D 03
CC123 U 04
CC123 F 05
;
DATA B;INPUT CODE $ KIND $;
CARDS;
AA123 B
BB123 C
CC123 F
DD123 N
EE123 A
FF123 D
;
RUN;
PROC SQL;
CREATE TABLE C AS
SELECT A.I_CODE,
CASE WHEN A.I_CODE=B.CODE & A.VALUE='U' THEN B.KIND
ELSE A.VALUE END AS VALUE,A.ID
FROM A LEFT JOIN B
ON A.I_CODE=B.CODE;
QUIT;
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.168.220.103
推 west1996:推,學到一招 08/14 18:55
推 Maninck:感謝~~不過這只能用SQL來解嗎?還有其他的方法嗎? 08/14 19:03
PROC SORT DATA=A;BY I_CODE;
PROC SORT DATA=B;BY CODE;
DATA C;MERGE A(IN=A) B(RENAME=(CODE=I_CODE));BY I_CODE;IF A;
IF VALUE='U' THEN VALUE=KIND;KEEP I_CODE VALUE ID;RUN;
※ 編輯: imaltar 來自: 218.168.220.103 (08/14 20:21)
推 Maninck:哇~~好強啊!又多學了一個^O^/ 08/14 21:37