2012-01-31 76 views
1

我每月运行一些sas查询,并将数据导出到特定文件夹。问题是我必须在运行代码之前手动创建这些文件夹,以便SAS不会出错。在SAS中制作目录(Windows)

有什么办法可以自动化吗?

我的文件夹都以这种方式被命名为:

月的号 - 月年的名称(12 - 2011年12月)。我也想创建一个名为Excel的子文件夹。

还有什么方法可以自动填充月份和数字...所以当我在1月份运行它时,它会变为(2012年1月1日)?

回答

5

XSYSTASK命令可以做到这一点。

但是,如果您处于企业指南环境中(我不相信),则默认情况下它在9.2中是允许的。我觉得9.3会在默认情况下,允许它在本地环境(SAS DUMMY blog)

例子:

options noxwait; 

data _null_; 
month=strip(put(month(today()),2.)); 
year=strip(put(year(today()),4.)); 
monname=put(today(),monname3.); 
dir_name=month !! " - " !! monname !! " " !! year; 
call symputx('dir_name',dir_name); 
run; 
%put &dir_name; 

x "cd D:\Data"; 
x "%str(mkdir %"&dir_name%")"; 

另一种选择是DCREATE功能

例子:

data _null_; 
month=month(today()); 
year=year(today()); 

dir_name=put(month,2.) !! " - " !! put(today(),monname3.) !! " " !! put(year,4.); 
NewDirectory=dcreate(dir_name,'D:\Data\'); 
run; 
+0

谢谢!据我了解..这将在数据文件夹中创建一个名为New_Dir的目录....有没有办法让它自动获取当前的月份数量/月份名称和年份?例如。 (01 - 2012年1月) – Adam 2012-01-31 16:36:17

+0

此外,这似乎只适用于本地驱动器。我将如何修改它,使其适用于网络驱动器? – Adam 2012-01-31 16:44:15

+0

我更新了我的答案。如果通过“网络驱动器”表示映射的驱动器......那么您仍应该能够以相同的方式引用它们(K:\或X:\)...如果您想在服务器上执行此操作,请发布更多信息 – 2012-01-31 17:06:37

0

这是一个简单的解决方案,如果不存在和使用,如果存在。 代码片段如下:

%Macro Verifica_Lib(Libreria,Ruta); 
Data _Null_; 
Call Symput('Destino',&Ruta||Compress('&Libreria')); 
Run; 
%Put &Destino; 
%If (%SysFunc(LibRef(&Libreria))) Ne 0 %Then %Do; 
%Put Verificando existencia de libreria; 
%Put La libreira &Libreria No Existe; 
%Put Se procederaa crearla; 
Options DLCreateDir; 
LibName &Libreria "&Destino"; 
%End; 
%Else %Do; 
%Put Verificando existencia de libreria; 
%Put La libreira &Libreria existe; 
%Put Se continuara el proceso; 
%End; 
%Error_Sas(Verificacion de Libreria local); 
%MEnd Verifica_Lib;