2016-05-09 5 views
0

В настоящее время я работаю над проектом в sas. Мы составляем отчеты на основе данных за период с ноября 2010 года. Мне нужно импортировать этот файл, который имеет имя // потребительский учет/Reports/SAS Reports/20151130/M0ED1 для ноябрьских данных. В следующем месяце это будет // потребительский учет/Reports/SAS Reports/20151231/M0ED2, а затем в следующем месяце он будет таким же, а не будет иметь данные от 20160130 и M0ED3. Я пытаюсь написать код, который будет напрямую импортировать файл с правильным именем, так что мне не нужно писать имя файла вручную каждый раз, когда я пытаюсь подготовить отчет. Пожалуйста, предложите мне путь. Ваша помощь будет оценена по достоинству.SAS Код для динамической даты

ответ

0

здесь вы идете ...

/*Set How many months ago the data you are looking at is*/ 
%let numMonths = 6; 
/*Set which Year and Month was report 1*/ 
%let firstReport = '15NOV2015'd; 


data _null_; 
/*Get Todays Date*/ 
format mydate myreportdate date9.; 
myDate = today(); 
/*Go Back the number of months set in the Macro variable. 
    As you want the last day of that month, add back on 1 month and then remove a day*/ 
myReportDate = intnx('month',myDate,-&numMonths.+1)-1; 
/*Calculate which report number this is using the INTCK Function to count the number of months ends crossed between 2 dates*/ 
myRunNumber = compress(put(INTCK('MONTH',&firstReport.,myReportDate)+1,best12.)); 
/*Create A String with the location and name of your report*/ 
myReportString = "//consumer accounting/Reports/SAS Reports/"|| 
         put(year(myReportDate),z4.)|| 
         put(month(myReportDate),z2.)|| 
         put(day(myReportDate),z2.)|| 
         "/M0ED"||myRunNumber; 
/*Create a macro variable with the location and name of your report*/ 
call symputx('myReport',myReportString); 
run; 

/*Output the macro variable to the log*/ 
%put &myReport.; 
+0

Большое спасибо за ответ. Но все-таки у меня одна проблема. Когда я использую mydate = today(); и запустите другую, я получаю M0EOD1 по желанию. Когда я поставлю mydate = '15Jun2016'd; Я получаю M0EOD2 по желанию, но когда я ставлю mydate = '15Jul2016'd, я получаю M0EOD91, но я ожидал M0EOD3. Также, когда я ставлю mydate = '15Aug2016'd, я получаю M0EOD92. Может ли кто-нибудь сказать мне, где проблема? – shankar

+0

Привет, Шанкар, боюсь, у меня не было SAS передо мной, когда я написал этот ответ, и, таким образом, ошибка закралась! Я изменил свой код, чтобы вместо этого использовать функцию intck, которая вычисляет разницу между двумя датами - в этом случае я установил ее для вычисления разницы в месяцах. Если это ответ на ваш вопрос, пожалуйста, дайте мне зеленый галочку! –

Смежные вопросы