Path SAS-%let和libname组合的结果
我目前正在学习SAS,我有一个代码可以修改和重用,但首先我必须理解它。我的问题只是其中的一小部分(代码顶部)。这是:Path SAS-%let和libname组合的结果,path,sas,Path,Sas,我目前正在学习SAS,我有一个代码可以修改和重用,但首先我必须理解它。我的问题只是其中的一小部分(代码顶部)。这是: %let dir=/home/user/PROJECT/CODES/; %let dir_project=/home/user/PROJECT/; libname inp "&dir_project" compress=yes; libname out "&dir.out" compress=yes; %let tg=out.vip; 我的问题是: &dir
%let dir=/home/user/PROJECT/CODES/;
%let dir_project=/home/user/PROJECT/;
libname inp "&dir_project" compress=yes;
libname out "&dir.out" compress=yes;
%let tg=out.vip;
我的问题是:
提前感谢您1-
&dir.
是一个宏变量。句点标志着变量的结束,因此&dir.out
在运行时解析为/home/user/PROJECT/CODES/out
。您的libname语句现在将librefout
链接到此物理位置
2.tg
变量是一个数据集引用,格式为“library.dataset”。这里,out
是库,vip
是数据集。通过这种方式,您可以编写以下代码:
data &tg.;
set sashelp.class;
run;
在out
库中创建数据集vip
这样,你实际上(几乎)是对的。
&tg.
(解析为out.vip
)的结果路径将是/home/user/PROJECT/code/out/vip.sas7bdat1-&dir.
是一个宏变量。句点标志着变量的结束,因此&dir.out
在运行时解析为/home/user/PROJECT/CODES/out
。您的libname语句现在将librefout
链接到此物理位置
2.tg
变量是一个数据集引用,格式为“library.dataset”。这里,out
是库,vip
是数据集。通过这种方式,您可以编写以下代码:
data &tg.;
set sashelp.class;
run;
在out
库中创建数据集vip
这样,你实际上(几乎)是对的。&tg.
(解析为out.vip
)的结果路径将是/home/user/PROJECT/code/out/vip.sas7bdat
前两条语句定义了两个宏变量,DIR
和DIR\u PROJECT
。在后两条语句中,使用这些宏变量定义两个libref,INP
和OUT
。最后一条语句只定义了另一个名为TG
的宏变量
宏变量引用以&
开头,后跟要展开的宏变量的名称。当is看到不能作为宏变量名或句点一部分的字符时,SAS将停止查找宏变量名。这就是为什么第一个libname语句使用DIR\u项目
宏变量的值,而不是DIR
宏变量。第二条libname语句中的句点告诉SAS您想用宏变量dir
的值替换&dir.
。如果您刚刚编写了&dirout
,那么SAS将查找名为dirout
的宏变量
宏变量只包含文本。文本的含义取决于使用它们生成的SAS代码。因此,前两个宏变量看起来像是包含Unix文件系统上目录的绝对路径,因为它们从根节点/
开始,以/
结束。这可以通过使用它们生成libname语句的方式得到证实
通过在第二条libname语句的路径后添加常量文本out
,结果是在宏变量DIR
的值命名的目录中查找名为out
的子目录
至于最后一个宏变量TG
它的含义取决于它的使用方式。由于它是由一个句点分隔的两个名称的形式,因此它看起来可以用于引用SAS数据集。特别是因为第一个名称与您在libname语句中定义的一个libref相同。因此,您可以在如下代码中使用该宏变量:
proc print data=&tg ; run;
select &tg ...
这将扩展为:
proc print data=out.vip ; run;
在这种情况下,您将在名为OUT的库中查找名为VIP的SAS数据集。因此,您将查找名为:
/home/user/PROJECT/CODES/out/vip.sas7bdat
现在,如果在某些SQL代码中使用该宏变量,如下所示:
proc print data=&tg ; run;
select &tg ...
然后它会扩展到
select out.vip ....
在这种情况下,您将在名为(或别名为)OUT的输入数据集中引用名为VIP的变量。前两条语句定义了两个宏变量,DIR
和DIR\u PROJECT
。在后两条语句中,使用这些宏变量定义两个libref,INP
和OUT
。最后一条语句只定义了另一个名为TG
的宏变量
宏变量引用以&
开头,后跟要展开的宏变量的名称。当is看到不能作为宏变量名或句点一部分的字符时,SAS将停止查找宏变量名。这就是为什么第一个libname语句使用DIR\u项目
宏变量的值,而不是DIR
宏变量。第二条libname语句中的句点告诉SAS您想用宏变量dir
的值替换&dir.
。如果您刚刚编写了&dirout
,那么SAS将查找名为dirout
的宏变量
宏变量只包含文本。文本的含义取决于使用它们生成的SAS代码。因此,前两个宏变量看起来像是包含Unix文件系统上目录的绝对路径,因为它们从根节点/
开始,以/
结束。这一点如何得到证实