2012-11-17 176 views
1

我有2個關於使用宏的SAS日期的問題。爲了使它更加複雜,我堅持使用2個特定的宏,我需要使用它(我嘗試解決它的一部分難題)。SAS宏的日期

,我需要使用宏是:

%let id=741852 
%let month=January February March April May June July August September October November December 

,我需要生成的輸出是學生在不同dicipline檔次rsults。只有通過更改學生的ID,輸出才能自行更新。

只有在我的輸出的標題中需要與日期相關的信息。我此刻的代碼如下:

Title1 "Grade for &firstname &lastname; 
Tilte2 "Bithtdate : &bday; 
Title3 "ID :&id" 
title5 "As of &sysdate, the grades are:" 

要創建我用的一個功能,因爲我在我的數據集的信息的BDAY變量:

CALL SYMPUTX('bday',Birth_date) 

此刻我的輸出標題2和圖4是如下:

Birtdate:12556

作爲17NOV12的,牌號爲:

我如何可以使用宏&月兼得標題讀作如下:生日:10 Janurary 2012年和截至2012年11月15日,等級如下:

(**五月日期似乎是錯誤的,但即時通訊工作在法國和日期前一個月)

我試過了%掃描功能,但它不會在這個月如果我插入ID。 plz幫助:)

+0

不知道如果我理解正確的你。你可以用'call symputx(「bday」,put(Birth_date,worddatx20。));'而不是'CALL SYMPUTX('bday',Birth_date)'? – Tartaglia

+0

可悲的是,我不能,我需要使用宏和月,也是我的文檔是法文(我翻譯的例子,所以每個人都可以理解),所以如果我使用該格式,我的日期將是英文。我可以將Local全局選項設置爲法語,但我需要使用原始宏。 –

回答

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()。宏功能修剪前導空白。

+0

在看到對這個問題的新評論之前,我發佈了我的答案。我現在不明白這個問題。你能詳細說明嗎?你的宏變量'month'用於什麼方式? – BellevueBob

+0

目前它沒有使用,它正在做我的作業拍拍。我們需要使用宏觀月份來證明整體行使更加困難。我還發現我的解決方案使用CALL SYMPUTX('bday',Birth_date)總是給出每個人的相同出生日期(這是我第一次運行程序時得到的值)。我試圖通過添加%SYMDEL bday來轉儲該值,但它不會改變任何內容。 –

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 
-----------------------------------