2017-10-05 10 views
0

끈적 거리는 일, 나는 세대 10 +부터 시작 영구 파일 시리즈를 다음 데재설정 세대 번호

을 :

file#010 
file#011 
file#012 
.... 
file#062 
file /*the latest one*/ 

이 일부 정리 작업, 세대를 1-9로 인한 잘못된 데이터가있는 것으로 간주되어 삭제되었습니다.

첫 번째 등 세대 # 001, # 002 및 것 때문에 나는이 시리즈를 다시 생성하고 싶습니다

:

file#001 
file#002 
file#003 
.... 
file#052 
file /*the latest one*/ 

이 유일한 방법 나는 것이 일을 알아 냈어요 시리즈 전체를 다른 이름으로 저장하고 오래된 데이터를 삭제 한 다음 다시 저장하십시오. 이것은 어리석은 잠재력이 있으며 -ooops-의 위험이 너무 높습니다. 세대 번호를 재생성하는 방법에 대한 아이디어가 있습니까?

+0

이 파일은 SAS와 관련이 있습니까? SAS를 사용하여 모든 파일의 이름을 바꿀 수있는 방법을 묻고 있습니까? – user2877959

+0

@ user2877959 나는 그렇게 생각한다. SAS 영구 데이터에는 현재 세대를 메타 데이터에 저장하는 ** GenMax ** 옵션이 있습니다. 이렇게하면 Os 측에서 간단한 이름 변경을 방지 할 수 있습니다. 나는 – pinegulf

답변

0

당신이 요구하는 것은 이러한 파일의 이름을 변경하기 위해 SAS를 사용하는 방법의 경우,이 무엇을해야 그 (사용자 환경을 가정하고 X 명령을 할 수 있습니다) :

%let dir=<path_to_your_folder>; 
filename fn pipe "dir /b &dir.\file#*"; 
data _null_; 
infile fn; 
input; 
rc=rename(cats("&dir.\",_infile_),cats("&dir.\file#",put(_N_,z3.)),'file'); 
run; 

당신은 SAS 기능

를 사용하여 동일한 기능을 수행 할 수
%let dir=<path_to_your_folder>; 
data _null_; 
    filename root "&dir"; 
    did=dopen('root'); 
    numfiles=dnum(did); 
    n=10; 
    do i=1 to numfiles; 
    physname=dread(did,i); 
    if prxmatch('/^file#\d\d\d/',physname) then do; 
     rc=rename(cats("&dir.\",physname),cats("&dir.\file#",put(n,z3.)),'file'); 
     n+1; 
    end; 
    end; 
    rc=close(did); 
run; 
+0

고마워. 이걸 시험 할게. 이 문제로 "# 055 # 056 # 067 # 068 ..."이 발생하지 않을 것입니까? – pinegulf

+0

그렇지 않습니다. 첫 번째 옵션은'file #'으로 시작하는 폴더의 파일 만 나열합니다. 그래서 자동 변수'_N_'을 사용하면 연속적인 연속성을 가질 수 있습니다. 두 번째 버전에서는 디렉토리의 모든 파일을 나열하므로 파일 이름을 지정하는 데 사용되는 변수'n'은 파일 이름이 정규식'/^file # \ d \ d \ d /'와 일치 할 때만 증가합니다 . – user2877959