SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 651|回复: 3
打印 上一主题 下一主题

请教宏中日期的比较

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2009-8-13 09:43:08 | 只看该作者

请教宏中日期的比较

有这么一点程序:
%macro a(endd);
%let char=10AUG2009;
%if "&endd"d<"&char"d %then %do;
    %put "&endd"d;
%end;
%else %do;
    %put "&char"d;
%end;
%mend;
%a(31JUL2009);

我的理解应该是输出“31JUL2009”d的,但是为什么输出的是"10AUG2009"d,是不是我的程序哪里写的不对?
对宏里面时间变量"&endd"d是数字型的还是字符型的?我希望是数字型的,这个程序该怎么写呢?
谢谢
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2009-8-13 09:49:18 | 只看该作者

Re: 请教宏中日期的比较

请别让贴子沉了。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2009-8-13 10:28:44 | 只看该作者

Re: 请教宏中日期的比较

[code:3q645c7n]%macro a(endd);
        %let endd=%sysfunc(inputn(&endd,date9.));
        %let char=%sysfunc(inputn(10AUG2009,date9.));
        %if &endd<&char %then %do;
                        %put %sysfunc(putn(&endd,date9.));
                %end;
        %else %do;
                        %put %sysfunc(putn(&char,date9.));
                %end;
%mend;

%a(31JUL2009);[/code:3q645c7n]
SAS宏变量的值永远是以character形式存储的,不管赋的是字符还是数值,宏变量"&endd"d解析后是字符串“31JUL2009”d
虽然在%if语句中会对expression自动调用%eval(),但字符串“31JUL2009”d没有被自动转换为numeric,仍然是character的,需要类型转换
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2009-8-13 13:23:31 | 只看该作者

Re: 请教宏中日期的比较

谢谢
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-5 23:10 , Processed in 0.134464 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表