2017-10-05 13 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_'を使用すると、連続した系列を持つだけで十分です。 2番目のバージョンでは、ディレクトリ内のすべてのファイルをリストするので、ファイルの番号付けに使用される変数 'n'は、ファイル名が正規表現'/^ file#\ d \ d \ d/'と一致したときにのみインクリメントされます。 。 – user2877959

関連する問題