我在使用宏时遇到了关于SAS日期的2个问题。为了使它变得更复杂,我遇到了需要使用的2个特定宏(我试图解决它的一部分)。
我需要使用的宏是:
%let id=741852
%let month=January February March April May June July August September October November December
我需要生成的输出是不同dicipline学生的成绩。只有通过更改学生的ID,输出才能自行更新。
只有在我的输出标题中才需要与日期相关的信息。我的代码目前如下:
Title1 "Grade for &firstname &lastname;
Tilte2 "Bithtdate : &bday;
Title3 "ID :&id"
title5 "As of &sysdate, the grades are:"
要创建bday变量,我使用了a函数,因为我的数据集中包含了信息:
CALL SYMPUTX('bday',Birth_date)
目前我的输出标题2和4如下:
Birtdate:12556
截至17NOV12,成绩为:
我如何使用宏观和月份两个标题如下:出生日期:2012年1月10日和截至2012年11月15日,评分如下:
(**这个日期可能看似错了,但是我用法语工作,而且这个月来到月之前)
我考虑了%SCAN的功能,但是如果我能用这个ID,那么这个月就不会用了。 PLZ帮助:)
答案 0 :(得分:2)
我不清楚你究竟想要完成什么,但这是一个类似的例子。我将语言环境设置为法语,以显示日期的格式。
data a;
length firstname lastname $20;
input id firstname $ lastname $ grade birthday :date9. ;
datalines;
741852 Mary Jones 92.3 01Jan1980
654654 Chuck Berry 76.9 02Mar1983
823983 Michael Jordan 81.2 04Apr1965
;
run;
options locale=FR;
%macro printinfo(id, ds);
data _null_;
set &ds;
where id=&id;
put "-----------------------------------";
put " Grade for: " firstname lastname;
put " Birthday : " birthday nldate.;
put " ID : " id;
put " As of &sysdate., the grade is: " grade;
put "-----------------------------------";
put " ";
run;
%mend;
option nonotes;
%printinfo(741852,a);
%printinfo(654654,a);
option notes;
这是日志输出
-----------------------------------
Grade for: Mary Jones
Birthday : 01 janvier 1980
ID : 741852
As of 20NOV12, the grade is: 92.3
-----------------------------------
7299 %printinfo(654654,a);
-----------------------------------
Grade for: Chuck Berry
Birthday : 02 mars 1983
ID : 654654
As of 20NOV12, the grade is: 76.9
-----------------------------------
答案 1 :(得分:1)
在不更改其他代码的情况下,请尝试以下两个title
语句:
title2 "Birthdate: %qleft(%sysfunc(putn(&bday,worddatx.)))";
title5 "As of %qleft(%sysfunc(putn(%sysfunc(today()),worddatx.))) the grades are:";
基本上,您的第一个宏变量bday
需要使用WORDDATX
格式进行格式化。此外,您应该使用系统函数TODAY()
来获取当前系统日期,以便您可以根据需要对其进行格式化。
%SYSFUNC
宏功能允许您执行其他SAS功能,在本例中为PUTN
和TODAY()
。 %QLEFT
宏功能修剪前导空格。