ฉันกำลังเขียนโปรแกรมด้วย Proc SQL โปรแกรมรับไฟล์อินพุตต่าง ๆ โดยที่ชื่อไฟล์เปลี่ยนในแต่ละเดือน (เช่น myfile_YYYY_MM หรือ mytable_YYYYMM หรือ mydata_YY_M)
ขณะนี้โปรแกรมส่วนใหญ่เป็นแบบไดนามิก และผู้ใช้จะถูกขอให้ป้อนวันที่รายงานผ่านทางพรอมต์เมื่อรันโปรแกรม
"วันที่พร้อมท์" (&Rep_Date.) ในโค้ดมีรูปแบบ DD MON YYYY (31 พฤษภาคม 2018) และฉันต้องตั้งค่าตัวแปรมาโครหนึ่งตัวเพื่อแปลงค่านี้ให้อยู่ในรูปแบบ YYMMn6 (เช่น 201805)
ไวยากรณ์มีลักษณะดังนี้:
%let Period = input("&Rep_Date."d,YYMMN.);
วิธีนี้จะได้ผลเมื่อพยายามสร้างตัวแปร d9 และสำหรับการสร้างตัวแปรเดือน/ปี เช่นนี้
%let date = "&Rep_Date."d; /*Last day execution month*/
%let year = %sysfunc(year("&Rep_Date."d));
%let month = %sysfunc(month("&rep_Date."d));
ด้วยเหตุผลบางประการ การดำเนินการเดียวกันนี้ใช้ไม่ได้เมื่อพยายามจัดรูปแบบวันที่เป็น YYMMn6
ฉันยังลองสร้างตัวแปร "Period" ในตาราง SAS ชั่วคราวเช่นนี้ แต่ก็ไม่มีโชคอีกครั้ง:
Data dates;
Period = input((&Rep_date.,6.), yymmn6.);
format Period yymmn6.;
Run;
มีความคิดเห็นใดบ้างที่ฉันจะผิด?