2016-05-04 20 views
0

3つ以上のファイルがある場合、バックアップからファイルを削除します。sasで削除する、バックアップからファイルを削除する

filename parent '/abc/cde'; 

親ディレクトリのファイルが3つ未満の場合、sasコードは何もしません。 サンプルファイルの名前: ABC_1117_02MAY2016.txt - すべて同じ長さです。

count()> 3の場合、sascodeはサブ文字列のすべての日付を返します。 02MAY2016、 3番目に小さい日付のファイルをすべて削除したいからです。

data all_files; 
keep substr_date; 
    did=dopen("parent"); 
    if dnum(did)>3 then do; 
     do i=1 to dnum(did); 
     wycinek_z_daty=substr(dread(did,i),10,9); 
     output; 
end; 
end; 

run; 

私はそれを

proc sort data=all_files; 
by descending substr_date; 
run; 

を並べ替えるそれは私が私が私が削除したいものをすべて持つテーブルを作成する

data backup; 
set all_files(obs=3); 
run; 

を削除したくないものです。

proc sql; 
create table delete as 
select*from all_files except select*from backup; 
quit; 

「削除」テーブルにあるこれらのファイルはどのように削除できますか?あなたが次に

%macro delete_file(file=); 
    fdelete("&file."); 
%mend; 

することができます:私は、私はfdelete目的球に助けを

%macro test; 
%do i=1 %to &sqlobs; 
fdelete('/abc/cde/ABC_1117_&something. Can I use macro variable for i? because only date in name is changing?) 
%end; 
%mend; 

おかげで、 aola

答えて

0

あなたがdeleteテーブルを持っていたら、私はそうのようなマクロを書くとを使用することになって知っていますそれを電話:

proc sql; 
    select cats('%delete_file(file=abc_1117_',substr_date,')') 
    into :dellist separated by ' ' 
    from delete; 
quit; 

&dellist.; 

私はおそらくoleファイル名をdeleteデータセットに設定し、abc_1117_をハードコーディングするのではなく、それを使用します。

関連する問題