2013-08-14 7 views
0

У меня есть папка, которая содержит файл добавляется к нему каждый день, как показано нижеSAS импортировать последний файл CSV в папке

Z: \ старого \ stock110813.csv Z: \ старого \ stock120813.csv Z: \ старого \ stock130813.csv Z: \ старого \ stock140813.csv

  1. Я хотел бы импортировать последнюю версию файла в SAS динамически т.е.. ищет папку последнюю дату
  2. или хотели бы SAS, чтобы сделать копию последней и изменить имя & местоположение файла

Я искал в Интернете в течение нескольких дней тестирования маленькие кусочки кода, но я борюсь, поэтому любая помощь будет оценена по достоинству.

веселит Джон

ответ

1

Если дата предсказуемая (т.е. текущая дата), то вы можете сделать:

%let date=%sysfunc(today,dateformat.); *whatever dateformat you need; 
proc import file="z:\old\stock&date..csv"... ; 
run; 

Если нет, то вам лучше всего использовать трубы с листинг каталога на см. последнее имя файла. Что-то вроде этого (логики каталога зависит от вашего сервера/OS/др.)

filename mydir pipe 'dir /b /od /a-d z:\old\'; 

data myfiles; 
infile mydir; 
input @1 filename $32.; 
call symput('filename',filename); 
run; 

proc import file="z:\old\&filename." ... ; 
1

Вы хотите использовать системную дату или дату в имени файла, чтобы определить, что самый новый файл? Если вы хотите использовать дату изменения, проверьте функцию foptname, чтобы определить их. Этот код просматривает дату в имени файла. Этот код работает без необходимости разрешения X-команды.

data newestFile (keep=newestFile); 
format newestFile $20.; 
retain newestFile newestDate; 
rc = filename("dir","z:\old\"); 
did = dopen("dir"); 
/* loop through file and subdirectories in a directory */ 
do i = 1 to dnum(did); 
    csvFile = dread(did,i); 
    rc=filename("fid",cats("z:\old\",csvFile)); 
    sdid=dopen("fid"); 
    /*check if date in name is newest if it is a file */ 
    if sdid le 0 then do; 
    csvFileDate = input(substr(csvFile,6,6),ddmmyy6.); 
    if csvFileDate gt newestDate then do; 
    newestDate = csvFileDate; 
    newestFile = csvFile; 
    end; 
    end; 
else rc = dclose(sdid); 
end; 
rc = dclose(did); 
/* move and rename file with latest date to newestFile.csv */ 
rc = rename(cats("z:\old\",newestFile), "z:\new\newestFile.csv",'file'); 
run; 
Смежные вопросы