日期的SAS宏

时间:2012-11-17 18:50:06

标签: date macros sas

我在使用宏时遇到了关于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帮助:)

2 个答案:

答案 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功能,在本例中为PUTNTODAY()%QLEFT宏功能修剪前导空格。