楼主: superyxo
8936 14

[问答] 用sas算一个变量在一段时间内的平均值 [推广有奖]

  • 2关注
  • 1粉丝

硕士生

64%

还不是VIP/贵宾

-

威望
0
论坛币
91 个
通用积分
1.0005
学术水平
7 点
热心指数
2 点
信用等级
2 点
经验
9870 点
帖子
93
精华
0
在线时间
199 小时
注册时间
2007-8-28
最后登录
2021-4-15

楼主
superyxo 发表于 2013-2-7 12:52:28 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我有一组贷款的数据,有贷款编号(id)、贷款时间(date)、贷款利率(interest)等变量。对每一笔贷款,我要算这个贷款以前六个月所有贷款的平均利率,请问可以用proc means直接算么?想了半天没想出来。求大牛解惑,多谢多谢!
二维码

扫码加我 拉你入群

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

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

关键词:平均值 interest means inter 贷款利率 interest 贷款利率 平均值

回帖推荐

playmore 发表于6楼  查看完整内容

你的要求类似于求股票价格的移动平均值 那里需要控制固定的步长,即lag,如前15个交易日 可以用SAS的临时数组来做,这样的宏在论坛里也可以搜到 但你这里是要求前六个月的平均值,即步长是不定的 所以不能用前面提到的临时数组的办法 我能想到的是用%do循环来做 %let BegT='1JAN2010'd; %let EndT='31DEC2012'd; %do i=&BegT %to &EndT; proc means data=have(where=(date>=&i and date

沙发
chenys625 发表于 2013-2-7 13:33:25
用proc means里面的by或者class

藤椅
hamsik11 发表于 2013-2-7 14:41:06
在proc means里data=xx(where=(****))里面设置

板凳
superyxo 发表于 2013-2-7 15:13:17
chenys625 发表于 2013-2-7 13:33
用proc means里面的by或者class
没有可以by的变量啊。比方说我有一个贷款是2013年1月20日的,我要算这个日子之前六个月内所有的贷款的平均利率,就是从2012年7月20号到2013年1月20日之间在我的数据里的所有贷款的平均利率;另外一个贷款是2012年12月30日的,对于这个贷款要算2012年6月30日到12月30日的所有贷款的平均利率。这个用by好像不行吧?对于一个贷款可以,但是我的数据里有几万条贷款,不知道怎么做出来这个by的变量

报纸
superyxo 发表于 2013-2-7 15:15:33
hamsik11 发表于 2013-2-7 14:41
在proc means里data=xx(where=(****))里面设置
我能想出来少量的贷款用这个可以。如果有几万条贷款,每一个贷款都要算出来对应的前六个月的平均利率要怎么算呢?多谢

地板
playmore 发表于 2013-2-7 16:48:00
superyxo 发表于 2013-2-7 15:15
我能想出来少量的贷款用这个可以。如果有几万条贷款,每一个贷款都要算出来对应的前六个月的平均利率要怎 ...
你的要求类似于求股票价格的移动平均值
那里需要控制固定的步长,即lag,如前15个交易日
可以用SAS的临时数组来做,这样的宏在论坛里也可以搜到

但你这里是要求前六个月的平均值,即步长是不定的
所以不能用前面提到的临时数组的办法

我能想到的是用%do循环来做
%let BegT='1JAN2010'd;
%let EndT='31DEC2012'd;
%do i=&BegT %to &EndT;
    proc means data=have(where=(date>=&i and date<intnx('month',&i,6,sameday))) out=want_&i;
       xxx
    run;
%end;

然后把所有的want_&i表格连起来就好了
%end;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
superyxo + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

7
hamsik11 发表于 2013-2-7 17:09:37
superyxo 发表于 2013-2-7 15:15
我能想出来少量的贷款用这个可以。如果有几万条贷款,每一个贷款都要算出来对应的前六个月的平均利率要怎 ...
写个宏,或者,对你的数据做个排序,用lag1,lag2.....lag6这样的函数来实现,然后再进行筛选
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
superyxo + 1 + 1 + 1 观点有启发

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

8
chenys625 发表于 2013-2-7 17:30:34
先排序做累加,然后用得到的数据集自己跟自己合并(合并后7月与1月在一行,以此类推),然后做差除以6就是6个月的平均值,最好去掉空值。

9
chenys625 发表于 2013-2-7 17:37:41
刚才说的是种思路,号称是某位老师的得意之作,其实我觉得一般。
换一个直接在data步里做的,程序如下。
求var时间间隔为interval的滑动均值
%let var=roa;
%let interval=3;

data r1;
set r;
by stkcd year;
if first.stkcd or n>=&interval. then do;
n=1;
sum_&var.=&var.;
end;
else do;
n+1;
sum_&var.+&var.;
end;
if n=3 then do;
mean_&var.=sum_&var./&interval.;
output;
end;
drop n sum_&var.;
run;


另外,可以研究下时间学列里的proc  expand,有类似的功能。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
superyxo + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

10
superyxo 发表于 2013-2-8 10:07:21
chenys625 发表于 2013-2-7 17:37
刚才说的是种思路,号称是某位老师的得意之作,其实我觉得一般。
换一个直接在data步里做的,程序如下。
...
这种办法好像只能用于固定的interval?我要做的好像不太一样。比方说,我要算2012年12月31之前的六个月的平均利率,如果我的数据里2012年12月31之前六个月里只有一笔贷款利率是1%,那么这六个月的平均利率就是1%。如果有三笔贷款,那平均利率就是这三个利率的平均。所以interval不固定

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

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