楼主: 玄之玄
2710 3

关于retain语句的实现中的一个问题。 [推广有奖]

  • 1关注
  • 0粉丝

已卖:1份资源

硕士生

67%

还不是VIP/贵宾

-

威望
0
论坛币
34 个
通用积分
3.2500
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
2250 点
帖子
14
精华
0
在线时间
362 小时
注册时间
2014-9-16
最后登录
2025-10-22

楼主
玄之玄 发表于 2016-11-11 11:59:55 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
如果我要按照每一个id,汇总cns的值。data chapt4.retain1;
input id txn_cde$ cns txn_dte$;
cards;
10 101 10 20070101
10 101 20 20080402
10 201 30 20050203
20 101 40 20040105
20 201 50 20040105
20 301 60 20070806
20 201 70 20050607
30 301 80 20070501
30 401 90 20070306
;
run;

proc sql;
create table sum as
select
id
,sum(cns) as cns
,count(*) as count
,sum(case when txn_cde in("101" "201") then 1 else 0 end) as cnt_condi
,min(txn_dte) as min_txn_dte

from chapt4.retain1;
group by 1
;
quit;
proc sort data= chapt4.retain1;by id txn_dte;run;
data test1;
        set chapt4.retain1;
        by id txn_dte;
        retain min_dte sum_cns cnt cnt_condition;
        if first.id then do;
                min_dte=txn_dte;
                sum_cns=0;
                cnt=0;
                cnt_condition=0;
        end;
        min_dte=min(min_dte,txn_dte);
        sum_cns+cns;
        cnt+1;
        cnt_condition+(txn_cde in("101" "201"));
        if last.id;
run;

其中group by 1 放在这里是什么意思,然后我应该只要对id排序就好了吧,为什么还要放一个txn_dte?



二维码

扫码加我 拉你入群

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

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

关键词:RETAIN ETA RET condition proc sql

沙发
zhangzachary 发表于 2016-11-11 15:23:39
1. group by 1是在SQL语句中对第一列变量进行分组操作,这里相当于group by id
2. 注意语句:if first.id then do; min_dte=txn_dte; min_dte 的取值是需要对 txn_dte 排序后才合理

藤椅
玄之玄 发表于 2016-11-11 15:57:44
zhangzachary 发表于 2016-11-11 15:23
1. group by 1是在SQL语句中对第一列变量进行分组操作,这里相当于group by id
2. 注意语句:if first.id  ...
因为他的结果是存在每个id按照上述条件输出最后一条记录的,所以我看了一下好像只有group by 1程序复合这个要求,那group by 1 为什么可以达到这个目的呢?谢谢

板凳
zhangzachary 发表于 2016-11-11 16:30:41
玄之玄 发表于 2016-11-11 15:57
因为他的结果是存在每个id按照上述条件输出最后一条记录的,所以我看了一下好像只有group by 1程序复合这 ...
并没有看懂你的问题。
SQL在conditional summary上相对简单一些,不过后面的sort+data步一样是可以实现相同需求的。
这里group by 1 = group by id, 如果你熟悉proc步可以理解为class id; 并没有其他特殊的意义。

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-19 04:22