楼主: friend简
1213 4

[问答] SAS怎么把数值型的变量转换为日期格式呀 [推广有奖]

  • 0关注
  • 0粉丝

高中生

12%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
1.1702
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
138 点
帖子
8
精华
0
在线时间
36 小时
注册时间
2020-5-16
最后登录
2023-6-14

楼主
friend简 发表于 2023-6-4 19:11:06 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
比如201101这样的周度数据变量转化为日期格式,SAS可以将周度数据变量定义为日期格式吗?
二维码

扫码加我 拉你入群

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

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

关键词:变量转换 数值型

回帖推荐

hugebear 发表于4楼  查看完整内容

感谢进一步的说明。如果是这样,可以使用intnx函数来解决这个问题。基本思路是首先根据输入(例如201101)的前四位数字来确定那一年的元旦,再根据输入的后两位数字来确定从元旦开始的经过的周数,便能得到201101所对应的(默认)日期值(即那一周的周日日期)。代码如下:

whymath 发表于5楼  查看完整内容

楼上的思路是可行的。 若借助SAS中特殊的输入格式 WEEKV(链接:https://support.sas.com/documentation/cdl/en/leforinforref/64790/HTML/default/viewer.htm#p16dlsgf1zuh0nn1r6nm8jbaxxqp.htm),则可以写得更简洁些: 结果为:

沙发
hugebear 发表于 2023-6-5 02:20:07
什么叫“周度数据”?如果你的问题是如何将数字201101转化为日期数据(即201101代表的是2011年1月),那么可以进行如下操作:
  1. data out;
  2.     x = 201101;
  3.     y = input(put(201101, 6.), yymmn6.);
  4.     format y yymmn6.;
  5. run;
复制代码

藤椅
friend简 发表于 2023-6-5 10:35:46
hugebear 发表于 2023-6-5 02:20
什么叫“周度数据”?如果你的问题是如何将数字201101转化为日期数据(即201101代表的是2011年1月),那么可 ...
201101表示2011年第一周,一年总共52-53周,SAS有没有程序能把这种周度数据从数值型格式转换为日期型格式,因为我在做分位数投资组合检验的时候想用intck函数进行错位匹配,比如intck('week',date1,date2)=1,让数据和数据之间相差一周,但是如果201101是数值型数据的话,跑出来的结果会报错

板凳
hugebear 发表于 2023-6-5 23:10:43
friend简 发表于 2023-6-5 10:35
201101表示2011年第一周,一年总共52-53周,SAS有没有程序能把这种周度数据从数值型格式转换为日期型格式 ...
感谢进一步的说明。如果是这样,可以使用intnx函数来解决这个问题。基本思路是首先根据输入(例如201101)的前四位数字来确定那一年的元旦,再根据输入的后两位数字来确定从元旦开始的经过的周数,便能得到201101所对应的(默认)日期值(即那一周的周日日期)。代码如下:
  1. data test;
  2.     input x;
  3.     datalines;
  4. 201101
  5. 201102
  6. 201103
  7. 201505
  8. ;
  9. run;

  10. data out;
  11.     set test;
  12.     /* Create the first day of the year */
  13.     y = mdy(1, 1, input(substr(put(x, 6.), 1, 4), 4.));
  14.     format y mmddyy10.;
  15.     z = intnx('week', y, input(substr(put(x, 6.), 5, 2), 2.));
  16.     format z weekdate.;
  17. run;
复制代码


报纸
whymath 发表于 2023-6-6 19:48:38
楼上的思路是可行的。
若借助SAS中特殊的输入格式 WEEKV(链接:https://support.sas.com/document ... nn1r6nm8jbaxxqp.htm),则可以写得更简洁些:
  1. data have;
  2.   input x;
  3.   y=input(substr(cats(x),1,4)||'W'||substr(cats(x),5),weekv7.);
  4.   put y= yymmdd10.;
  5.   datalines;
  6. 201101
  7. 201102
  8. 201103
  9. 201505
  10. ;
  11. run;
复制代码
结果为:
  1. y=2011-01-03
  2. y=2011-01-10
  3. y=2011-01-17
  4. y=2015-01-26
复制代码

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

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