楼主: mzyoung
33793 19

sas中如何把年月日日期截取月份,并改为连续的数字? [推广有奖]

  • 6关注
  • 2粉丝

硕士生

59%

还不是VIP/贵宾

-

威望
0
论坛币
177 个
通用积分
0.1201
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
4129 点
帖子
93
精华
0
在线时间
190 小时
注册时间
2011-9-11
最后登录
2023-3-4

楼主
mzyoung 在职认证  发表于 2014-2-20 16:28:46 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
在sas中,如何把具体的“年月日”日期改为连续的数字,如将2007-01-01,2007-01-02,……2007-02-01,2007,-02-02……2008-01-01改为1,1,……2,2……13?
谢谢
二维码

扫码加我 拉你入群

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

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

关键词:年月日 sas 日期转换为连续数字

沙发
歪丫头 发表于 2014-2-21 14:41:19
试试用mouth函数。例如,原来的日期变量为date,定义新的变量 m=mouth(date)。不知道是不是你想问的问题。希望能帮助到你。
已有 1 人评分论坛币 收起 理由
admin_kefu + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

藤椅
mzyoung 在职认证  发表于 2014-2-21 18:08:34
歪丫头 发表于 2014-2-21 14:41
试试用mouth函数。例如,原来的日期变量为date,定义新的变量 m=mouth(date)。不知道是不是你想问的问题。 ...
用month函数只是截取了月份,新的一年开始,它又从1开始计算了。我想要的是把日期转为从1开始的连续数字,这样便于循环计算指标。想依据两个月的日数据计算一个指标。。。不过还是谢谢

板凳
mingfeng07 学生认证  发表于 2014-2-21 23:00:31
data a;
set xx;
m='31dec2006'd;
newdate=int(date-m);
drop m date;
run;
欢迎扫一扫我头像关注, 不定期分享SAS技术知识。

报纸
mzyoung 在职认证  发表于 2014-2-22 09:59:56
mingfeng07 发表于 2014-2-21 23:00
data a;
set xx;
m='31dec2006'd;
不好意思,“m='31dec2006'd;"这个没看懂,可否解释一下,谢谢。
ps: 我用了比较笨的方法,先用month、year分别提取月份和年份,然后再用if函数,若year=2008则mth=month+12;若year=2009则mth=month+24

地板
mzyoung 在职认证  发表于 2014-2-22 11:26:22
mingfeng07 发表于 2014-2-21 23:00
data a;
set xx;
m='31dec2006'd;
不过我的方法还有个问题,如果第一个月不是从1月开始,就比较麻烦了,比如从2007-12-01开始,到2009-12-31结束,就不能按我说的方法做了。so 能否再细说一下你的方法,多谢

7
mzyoung 在职认证  发表于 2014-2-22 11:47:13
mingfeng07 发表于 2014-2-21 23:00
data a;
set xx;
m='31dec2006'd;
试了一下你的方法,结果得到的是关于day的连续数据,即110104、110105、110106、110107、110110、110111……变成了4、5、6、7、10、11……,这样还是无法按月份循环计算指标。本意是依据m-3、m-2、m-1三个月的日数据来计算m月的某个变量

8
mingfeng07 学生认证  发表于 2014-2-22 22:38:27
data a;
set xxx;
m='01dec2006'd;
new_date=INTCK('month',m,newdate);
run;
可以得到连续月份
欢迎扫一扫我头像关注, 不定期分享SAS技术知识。

9
mzyoung 在职认证  发表于 2014-2-23 11:32:57
mingfeng07 发表于 2014-2-22 22:38
data a;
set xxx;
m='01dec2006'd;
嗯,这个方法好,谢谢!
对了,还有一个问题,我现在是想依据3个月的日数据来计算其均值、偏度、分位数等指标,每3个月计算一次,使用循环。但是目前只知道,按月统计的程序
proc means data=data.sj_2 noprint;
var ri;
by code date;
output out=data.sj_4 mean=mean range=range skewness=skewness kurtosis=kurtosis p1=p1 p5=p5 p10=p10 median=p50 p90=p90 p95=p95 p99=p99 qrange=qrange;
run;
这样只能是每个月的日数据计算指标。
想用宏来计算的,程序如下:
%macro mad;
%do i=1 %to 31;
   proc univariate data=data.sj_9 noprint;
   where mm>=&i. and mm<=2+&i.;/*mm是连续的月份,那边用where或者if都不行,或者把这if语句放到proc之前也不行*/
   var rI;
   by code;
   output out=data.sjcl1 mean=mean range=range skewness=skewness kurtosis=kurtosis p1=p1;
run;
%end;
%mend mad;
%mad;
能否再帮忙看看,谢谢。

10
mingfeng07 学生认证  发表于 2014-2-23 22:41:51
你的意图我不是很明白,你试试这个
%macro mad;
%do i=1 %to 31;
data data.sj_&i.;
set data.sj_9;
where mm>=&i. and mm<=2+&i.;
run;
proc univariate data=data.sj_&i noprint;
var rI;
by code;
output out=data.sjcl&i mean=mean range=range skewness=skewness kurtosis=kurtosis p1=p1;
run;
%end;
%mend mad;
%mad;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
mzyoung + 1 + 1 + 1 热心帮助其他会员

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

欢迎扫一扫我头像关注, 不定期分享SAS技术知识。

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

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