作者imaltar (..)
站内Statistics
标题Re: [程式] SAS抓取曾发生过有特殊纪录之资料
时间Fri Jun 18 13:09:06 2010
※ 引述《XYH (斐娟粉丝>//<)》之铭言:
: [程式问题]:
: 资料处理
: [软体熟悉度]:
: 低(1~3个月)
: [问题叙述]:
: 想要利用SAS找出所有住院资料中曾发生因某病住院的患者,
: 其住院的所有笔数。
: 以精神分裂症为例,(用文字我叙述应该很难让大家了解,画图说明好了)
: 原始资料 希望资料
: -------- ----------------
: ID 住院原因 ID 住院原因
: A 精神分裂症 A 精神分裂症
: A 气管炎 A 支气管炎
: B 心脏病 C 支气管炎
: B 糖尿病 \ C 精神分裂症
: B 肺炎 --------\ F 精神分裂症
: C 支气管炎 --------/ F 糖尿病
: C 精神分裂症 /
: D 肝硬化 选A、C、F
: D 高血压
: E 外伤
: E 肝炎
: F 精神分裂症
: F 糖尿病
: 目前规划:
: 原始资料 产出新档案
: -------- ----------------
: ID 住院原因 NewID 住院原因
: A 精神分裂症 A 精神分裂症
: A 气管炎 C 精神分裂症
: B 心脏病 F 精神分裂症
: B 糖尿病 \ \
: B 肺炎 ------\ ----\
: C 支气管炎 ------/ ----/
: C 精神分裂症 / /
: D 肝硬化 A、C、F 比较左边两ID
: D 高血压
: E 外伤
: E 肝炎
: F 精神分裂症
: F 糖尿病
: 我想要用产出的新档案ID(即精神分裂症病史患者),
: 和原始档案比较,
: 目前是打算用where选择相同的ID
: 但是遇到问题,
: where只能比较字串如:"精神分裂症"
: 似乎没有办法比较一大串资料档之中的变数。
: 不知道有没有人能够给小弟一点帮助呢?
: 感谢大家。
: [程式范例]:
: DATA Schiz;
: set Source;
: set NewFile;
: where ID=NewID;
: Run;
根据你的例子,假设一个date:
data hosp;input id $ 1-2 sick $ 3-15;
cards;
A 精神分裂症
A 支气管炎
B 心脏病
B 糖尿病
B 肺炎
C 支气管炎
C 精神分裂症
D 肝硬化
D 高血压
E 外伤
E 肝炎
F 精神分裂症
F 糖尿病
;
run;
再筛选出有精神分裂症的id:
data id;set hosp(where=( sick in ('精神分裂症')));keep id;run;
将筛选出来的id档串回原本的档案
proc sort data=hosp;by id;
proc sort data=id;by id;
data hosp1;merge hosp(in=a) id(in=b);by id;if a=b;run;
hosp1就是你要的结果date
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.43.121.234
1F:推 XYH:感谢唷^o^ 06/18 14:53