SAS:如何在程序退出时或通过宏删除查询输出文件(.sasbdat7&;log)?
我被指示在运行新查询之前手动删除输出文件。看起来这可以作为一个宏,或者一个我还没有发现的系统设置来完成。您知道如何做到这一点吗?这是使用半永久性库时出现的常见问题。通常,工作目录空间的分配空间小于半永久性库目录空间。在这些情况下,半永久目录空间要大得多,可以更容易地用于大型临时表。保留旧文件也很容易,但您可以遵循一些好的做法来减少这种情况SAS:如何在程序退出时或通过宏删除查询输出文件(.sasbdat7&;log)?,sas,Sas,我被指示在运行新查询之前手动删除输出文件。看起来这可以作为一个宏,或者一个我还没有发现的系统设置来完成。您知道如何做到这一点吗?这是使用半永久性库时出现的常见问题。通常,工作目录空间的分配空间小于半永久性库目录空间。在这些情况下,半永久目录空间要大得多,可以更容易地用于大型临时表。保留旧文件也很容易,但您可以遵循一些好的做法来减少这种情况 当你运行一个大的SAS程序时,它有很多不同的文件依赖性,考虑有三个不同的空间: 临时存储-不需要在当前会话之后保留的临时文件。在SAS中,这是工作目录 半永久
当你运行一个大的SAS程序时,它有很多不同的文件依赖性,考虑有三个不同的空间:
proc数据集的临时表
:
proc datasets lib=templib nolist;
delete _:;
quit;
proc datasets lib=templib nolist;
delete dataset1
dataset2
dataset3
;
quit;
前缀可以是简单的,也可以是复杂的。如果没有这种类型的系统,则需要在proc datasets
中手动指定每个数据集:
proc datasets lib=templib nolist;
delete _:;
quit;
proc datasets lib=templib nolist;
delete dataset1
dataset2
dataset3
;
quit;
处理日志
SAS中的日志总是临时的,除非您告诉它们要写在某个地方。如果由于您的设置,它们总是写在某个地方,那么最好按时间戳保存它们的临时存档。有时你要到4周后才能发现bug。您的系统管理员可以创建一个脚本,在一定时间后压缩或删除旧文件
如果不可能,您有两种方法可以直接在SAS中处理此问题:
1。使用x
命令
x
需要启用,并允许您直接通过SAS运行操作系统命令。假设您正在Linux上运行。您可以使用此行删除以.log
结尾的所有文件:
x'rm/my/directory/*.log'代码>
如果没有启用x
命令,事情会变得更加棘手。您可以在data
步骤中通过SAS直接执行此操作
2。使用SAS程序
SAS有一套文件/文件夹功能,允许您执行复制、粘贴、获取文件属性等操作。下面的程序将删除文件夹中以.log
结尾的所有文件
/* Put your filename here without ending slash.
If in Windows, change to \
*/
%let directory = /my/directory;
filename mydir "&directory";
data _null_;
length filename $1000.;
/* Open the directory and assign a Directory ID */
did = dopen("mydir");
/* Read every file name in the directory */
do i = 1 to dnum(did);
filename = dread(did, i);
/* If the the filename ends in .log, then delete it */
if(upcase(scan(filename, -1, '.'))) = 'LOG' then do;
/* If in Windows, change to \ */
rc = filename('logfile', cats("&directory./", filename));
rc = fdelete('logfile');
end;
end;
/* Close the directory */
rc = dclose(did);
run;
将其封装在宏中并保存到sasasuts
空间,您可以在其他位置调用它(例如%cleanLogs(directory=/my/directory);
)。这取决于输出文件的位置。如果它们在工作目录中,那么在会话结束后,所有文件都将被自动删除。如果您的日志和数据保存在永久位置,您可以编写一些SAS程序来删除它们。感谢@StuSztukowski,这些文件将保存在其他位置。你认为编写一个程序来删除它们有多困难?我只使用SAS eguide来验证我创建的规则的输出。我有编写javascript和php的丰富经验。该程序是在SAS服务器上运行的存储进程吗?程序(或查询)是否作为程序的批处理执行运行?如何指定输出位置(对于数据集,该位置将是LIBNAME语句中指定的路径,对于ODS输出,该位置可以在ODS语句中指定)