1

マクロを使用した SAS 日付に関して 2 つの問題が発生しました。さらに複雑にするために、使用する必要がある2つの特定のマクロにこだわっています(解決しようとしているパズルの一部です)。

使用する必要があるマクロは次のとおりです。

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

生成する必要がある出力は、さまざまな分野の学生の成績結果です。学生の 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 は次のとおりです。

誕生日:12556

2012 年 11 月 17 日現在、成績は次のとおりです。

マクロ &month を使用して、両方のタイトルを次のように読み取るにはどうすればよいですか: 生年月日: 2012 年 1 月 10 日および 2012 年 11 月 15 日現在、成績は次のとおりです。

(**日付が間違っているように見えるかもしれませんが、私はフランス語で働いており、月の前に日が来ます)

%SCAN 機能を試してみましたが、ID を変更すると月が更新されません。助けてください:)

4

2 に答える 2

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
-----------------------------------
于 2012-11-21T14:08:10.487 に答える
1

他のコードを変更せずに、次の 2 つの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先頭の空白を削除します。

于 2012-11-17T20:10:08.180 に答える