楼主: priss111
940 0

请问以下3个sql能否合并成1个sql实现(优化)?谢谢。 [推广有奖]

  • 0关注
  • 5粉丝

已卖:9份资源

副教授

16%

还不是VIP/贵宾

-

威望
0
论坛币
153 个
通用积分
47.5396
学术水平
11 点
热心指数
14 点
信用等级
10 点
经验
14935 点
帖子
472
精华
0
在线时间
808 小时
注册时间
2008-3-30
最后登录
2025-3-17

楼主
priss111 发表于 2016-12-16 16:32:04 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

各位老师好:
请问以下3个sql能否合并成1个sql实现?
或者以下3个sql是否能用1个sql优化一下?
***总是感觉自己写的代码繁琐的看不下去有不知如何优化更合适。;
谢谢。

说明:
1、flw20140630数据集中同个id(card_id or var1)有多条检测记录;
2、card数据集是每条id对应的除检测以外的其他信息;
3、将card中与flw20140630有相同id的首次与末次检测结果进行匹配,
    但要保留card中所有的id(要知道有多少id有检测结果)。


***2.1:选择首次cd4检测结果与检测日期;
proc sql;
    create table flwfirst as
    select var1,var53,var54,var57,var58,var59,var60,var61,
    input(compress(var1,"‘’"),$40.) as cardid
    from epi.flw20140630
    where var57 is not missing
    group by input(compress(var1,"‘’"),$40.)
    having var58=min(var58)
    ;
quit;
proc sort data=flwfirst out=flwfirst nodupkey;
    by cardid var58;
    run;

***2.2:选择末次cd4检测结果与检测日期;
proc sql;
    create table flwlast as
    select  var1,var53,var54,var57,var58,var59,var60,var61
    from epi.flw20140630
    where var57 is not missing
    group by input(compress(var1,"‘’"),$40.)
    having var58=max(var58)
    ;
quit;
proc sort data=flwlast out=flwlast(rename=(var1=var1_ var53=var53_ var54=var54_
        var57=var57_ var58=var58_ var59=var59_ var60=var60_ var61=var61_)) nodupkey;
    by var1 var58;
    run;

proc sql;
    create table cardflw as
        select a.*,
               b.*,
               c.*
        from card(where=(areatype not in ("港澳台" "外籍") and
            flagoval eq "已终审卡"                and
            typeocase in ("实验室诊断病例" "临床诊断病例") and
            dateotype between '01jul1985'd and '30jun2014'd and
            int(addcode/1000000) eq 44)) as a
        left join flwfirst as b
        on input(compress(a.card_id,"‘’"),$40.) = input(compress(b.var1,"‘’"),$40.)
        left join flwlast as c
        on input(compress(a.card_id,"‘’"),$40.) = input(compress(c.var1_,"‘’"),$40.);
quit;

proc sort data=cardflw out=cardflw nodupkey;
    by card_id;
    run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:sql left join compress NODUPKEY proc sql

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 01:33