楼主: 小鳄鱼a
3330 17

如何设定日期间隔标记 [推广有奖]

11
小鳄鱼a 发表于 2014-10-30 21:32:54
sniperhgy 发表于 2014-10-30 12:33
楼主你好,我也写了一段,请试试看:
你这个  太高端了  完全看不懂   有时间的话请给解释一下

12
sniperhgy 发表于 2014-10-30 21:58:57
小鳄鱼a 发表于 2014-10-30 21:32
你这个  太高端了  完全看不懂   有时间的话请给解释一下
额……,高端……,好吧,我加上注释了:
  1. /* 声明一个不生成数据集的data部 */
  2. data _null_;
  3.   /* 创造一个变量,长度200 */
  4.   format obs_list $200.;
  5.   /* 引用temp,将eof作为文件到位部的标志 */
  6.   set temp end = eof;
  7.   /* 初始化obs_list,赋初值“” */
  8.   retain obs_list "";
  9.   /* 当pubdate等于0时,则…… */
  10.   if pubdate = 0 then
  11.     /* 拼接当前行号到obs_list里面去 */
  12.     obs_list = strip(obs_list) || strip(_N_) || strip(",") ;

  13.   /* 当到达temp的末尾,则…… */
  14.   if eof then
  15.     /* 将obs_list里面的内容放到宏变量obs_list里面去 */
  16.     call symput("obs_list", substr(strip(obs_list), 1, length(strip(obs_list)) - 1));
  17. /* data部结束必须写…… */
  18. run;

  19. %put &obs_list.;

  20. /* 创建数据集wanted */
  21. data wanted;
  22.   /* 引用temp */
  23.   set temp;
  24.   /* 初始化iCurrent,赋初值1 */
  25.   retain iCurrent 1;

  26.   /* 如果当前行的_N_减去obs_list中的第iCurrent个值的绝对值小于等于5,则…… */
  27.   if abs(_N_ - scan("&obs_list.", iCurrent, ",")) <= 5 then do;
  28.     /* 计算w的值 */
  29.     w = _N_ - scan("&obs_list.", iCurrent, ",");
  30.     /* 当w的值等于5,则…… */
  31.     if w = 5 then do;
  32.       /* obs_list里面的行号需要移动到下一个了,所以将iCurrent+1,这样scan的时候,就可以取得下一值*/
  33.       iCurrent = iCurrent + 1;
  34.     /* 和if w = 5 then do; 配套的,不写出错*/
  35.     end;
  36.   /* 和if abs(_N_ - scan("&obs_list.", iCurrent, ",")) <= 5 then do; 配套的,不写出错*/
  37.   end;
  38.   /* 当前行的_N_ - scan("&obs_list.", iCurrent, ",")) > 5, 则…… */
  39.   else
  40.     /* w赋值空值 */
  41.     w = .;
  42.   /* 将iCurrent去掉,没有必要留着了,但如果想看看他是怎样变化的,可以不去掉 */
  43.   drop iCurrent;
  44. /* data部结束必须写…… */
  45. run;
复制代码
不知道楼主是否满意啊
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
小鳄鱼a + 5 + 4 + 4 + 4 精彩帖子

总评分: 论坛币 + 5  学术水平 + 4  热心指数 + 4  信用等级 + 4   查看全部评分

13
小鳄鱼a 发表于 2014-10-30 22:05:17
sniperhgy 发表于 2014-10-30 21:58
额……,高端……,好吧,我加上注释了:不知道楼主是否满意啊
谢谢   有时间回过头来好好研究研究

14
pobel 在职认证  发表于 2014-10-31 07:30:25
小鳄鱼a 发表于 2014-10-30 21:25
能否解释下ifn  这个函数啊     谢谢
函数ifn(参数1,参数2,参数3)  返回一个数值型的值。

判断参数1是否成立,
如果成立,返回参数2;
如果不成立,返回参数3.

15
pobel 在职认证  发表于 2014-10-31 07:30:59
小鳄鱼a 发表于 2014-10-30 21:26
select l.*,    什么意思啊
就是select l表的所有变量

16
小鳄鱼a 发表于 2014-10-31 08:38:34
pobel 发表于 2014-10-31 07:30
函数ifn(参数1,参数2,参数3)  返回一个数值型的值。

判断参数1是否成立,
如果每个id不止一个  pubdate为0的呢

17
pobel 在职认证  发表于 2014-10-31 08:47:25
小鳄鱼a 发表于 2014-10-31 08:38
如果每个id不止一个  pubdate为0的呢
那你就用8楼的方法吧,思路很清楚。

18
eflucy 发表于 2014-10-31 16:01:29
pobel 发表于 2014-10-30 07:36
data wanted;
   merge test
         test(where=(_pubdate=0) rename=(date=_date pubdate=_pubdate) ...
思路真好啊

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

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