楼主: playmore
4820 6

[有偿编程] 请问如何判断date、time和datetime型变量的合法性 [推广有奖]

已卖:1645份资源

学科带头人

2%

还不是VIP/贵宾

-

TA的文库  其他...

R相关

经济学相关

金融工程

威望
1
论坛币
16356 个
通用积分
8.6697
学术水平
372 点
热心指数
394 点
信用等级
341 点
经验
15297 点
帖子
1194
精华
1
在线时间
1332 小时
注册时间
2007-1-11
最后登录
2025-12-1

初级学术勋章 初级热心勋章 中级热心勋章

楼主
playmore 发表于 2013-1-8 09:42:19 |AI写论文
100论坛币
比如

%let date='20FEB2012'd;
%let time='12:31:78't
%let datetime='20FEB2012:00:00:00'dt;

有没有宏函数可以判断上述变量的合法性,并返回1或0给指定宏变量

要求不要在LOG窗口显示错误提示,不要用复杂的宏和正则

如果在data步里用IFN的话,还是会显示错误的LOG,除非屏蔽LOG

多谢高手指教!

关键词:datetime time date ATET IME 合法性 如何
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

沙发
playmore 发表于 2013-1-9 09:46:49
再顶一下吧

顺便贴一下我过去写的判断是否是闰年的一个宏的一部分
里面SourceTable是包含一个日期变量的数据集
最后生成OutputVar,为标记变量,如果是闰年则返回1,否则返回0
里面就屏蔽了LOG输出

  1. /* 暂时关闭Log窗口输出 */
  2. proc printto log='recycle bin';
  3. run;
  4. data &TargetTable;
  5. set &SourceTable;
  6. &OutputVar.=IFN(INPUT(CATT('29FEB',YEAR(&DateVar)),DATE9.),1,0);
  7. run;
  8. /* 恢复Log窗口输出 */
  9. proc printto log=log;
  10. run;
复制代码

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

藤椅
ziyenano 发表于 2013-1-9 11:11:14
proc printto log='recycle bin';
run;
%let datetime='20FEB2012:00:00:00'dt;
%let id=%sysfunc(ifn(%sysfunc(putn(&datetime,20.))>0,1,0));
proc printto log=log;
run;
%put &id;

板凳
playmore 发表于 2013-1-9 13:13:37
ziyenano 发表于 2013-1-9 11:11
proc printto log='recycle bin';
run;
%let datetime='20FEB2012:00:00:00'dt;
多谢
只不过这种方法我知道

我的目的是要在我写的所有宏内加入日期变量的合法性检验
所以想尽可能简洁
因此在这里悬赏求助
不知道有没有更简洁的方法
谢谢!
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

报纸
pobel 在职认证  发表于 2013-1-9 13:54:49
playmore 发表于 2013-1-9 13:13
多谢
只不过这种方法我知道
如果要检验日期或时间“常量”的合法性,当所输入的值不合法的时候,如“32Jan2013”d,我感觉log里总会有异常信息出现。因为在你对这个值做任何处理之前,SAS就会看到这不是一个合法的时间/日期常量了。只能将log信息转移到别的地方才能确保”log窗口“里不会有这个错误信息。

和谐拯救危机

地板
playmore 发表于 2013-1-9 13:57:24
pobel 发表于 2013-1-9 13:54
如果要检验日期或时间“常量”的合法性,当所输入的值不合法的时候,如“32Jan2013”d,我感觉log里总会有 ...
嗯,我是在想在SAS里有没有类似Excel的ISERROR函数
如果参数有错就返回1这样的
我搜了下没有搜到
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

7
pobel 在职认证  发表于 2013-1-9 14:02:59
playmore 发表于 2013-1-9 13:57
嗯,我是在想在SAS里有没有类似Excel的ISERROR函数
如果参数有错就返回1这样的
我搜了下没有搜到
input()函数可以允许第一个参数是错误的,不过不适合来检验日期常量。

data test;
   input date : $20.;
   date_n=input(date,??yymmdd10.);
   flag=ifc(missing(date_n),"NOT VALID","VALID");
   put date= flag=;
   cards;
2012-12-12
2013-02-29
2012-99-44
hahahahaha
;
run;
和谐拯救危机

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

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