0

我想弄清楚如何创建动态库引用。我已经想出了如何创建目录,但现在:如何正确创建库引用?

下面的代码有效,但需要重复代码。第一个块不会创建引用,但第二个会创建引用。将其放入循环(执行两次)不起作用......

我想将此代码重做一个宏,以便在调用宏时分配根目录。

提前致谢!

data _null_;
rootdir='c:/temp';
dir1=put(today(),yymmddn8.);
dir2='Individual';
dir3='Household'; 
newdir1=dcreate(dir1,rootdir);
newdir2=dcreate(dir2,newdir1); 
newdir3=dcreate(dir3,newdir1);
lname=catx('/',rootdir,dir1,dir2);
lname2=catx('/',rootdir,dir1,dir3);
call symput('ln1',lname);
call symput('ln2',lname2);
libname Indiv "&ln1";
libname HH "&ln2";
run;

data _null_;
rootdir='c:/temp';
dir1=put(today(),yymmddn8.);
dir2='Individual';
dir3='Household'; 
lname=catx('/',rootdir,dir1,dir2);
lname2=catx('/',rootdir,dir1,dir3);
call symput('ln1',lname);
call symput('ln2',lname2);
libname Indiv "&ln1";
libname HH "&ln2";
run;
4

2 回答 2

0

libname 不需要在 datastep 中执行;这是一个开放的代码声明。因此,您的代码可以简单地运行 datastep,然后运行 ​​libname 语句,即

data _null_;
rootdir='c:/temp';
dir1=put(today(),yymmddn8.);
dir2='Individual';
dir3='Household'; 
newdir1=dcreate(dir1,rootdir);
newdir2=dcreate(dir2,newdir1); 
newdir3=dcreate(dir3,newdir1);
lname=catx('/',rootdir,dir1,dir2);
lname2=catx('/',rootdir,dir1,dir3);
call symput('ln1',lname);
call symput('ln2',lname2);
run;
libname Indiv "&ln1";
libname HH "&ln2";

真的,虽然这些都不需要数据步骤......

%let dir1=%sysfunc(today(),YYMMDDN8.);
%let dir2=Individual;
%let dir3=Household;
%let ln1=c:/temp/&dir1./&dir2.;
%let ln2=c:/temp/&dir1./&dir3.;
x "md &ln1.";
x "md &ln2.";
libname Indiv "&ln1.";
libname HH "&ln2.";

您甚至不必创建 ln1 和 ln2,您可以直接将 libname 分配给 ln1 和 ln2 的文本。我还添加了目录创建语句,以明确它是如何交互的(如果你确实使用它,你应该使用中间 ln1/ln2)。

于 2012-10-15T14:53:08.953 回答
0
%macro libs(rootdir);
data _null_;
dir1=put(today(),yymmddn8.);
dir2='Individual';
dir3='Household'; 
newdir1=dcreate(dir1,&rootdir);
newdir2=dcreate(dir2,newdir1); 
newdir3=dcreate(dir3,newdir1);
call symput('ln1',catx('/',&rootdir,dir1,dir2));
call symput('ln2',catx('/',&rootdir,dir1,dir3));
run;
libname Indiv "&ln1";
libname HH "&ln2";
%mend libs;

%libs("c:/temp")

似乎可以解决问题。不确定是否是最有效的方法,但至少它是一种方法。谢谢乔的建议,使我得到了最终答案。

于 2012-10-15T23:49:36.483 回答