Path SAS-%let和libname组合的结果

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

我目前正在学习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.out是什么意思?它指的是什么?我想这是一种叫做“出去”的东西。它正在寻找一个数据库吗?如果是,并且我的所有数据库通常都是工作中的临时数据库,我是否应该将其更改为WORK.OUT
  • “tg”的最终路径是什么?我怀疑它是:“/home/user/PROJECT/CODES/out.vip”
  • 最初代码是指C:drive上的一些位置,但我完全在sasstudio中工作,所以我必须对其进行调整


    提前感谢您

    1-
    &dir.
    是一个宏变量。句点标志着变量的结束,因此
    &dir.out
    在运行时解析为
    /home/user/PROJECT/CODES/out
    。您的libname语句现在将libref
    out
    链接到此物理位置

    2.
    tg
    变量是一个数据集引用,格式为“library.dataset”。这里,
    out
    是库,
    vip
    是数据集。通过这种方式,您可以编写以下代码:

    data &tg.;
      set sashelp.class; 
    run;
    
    out
    库中创建数据集
    vip


    这样,你实际上(几乎)是对的。
    &tg.
    (解析为
    out.vip
    )的结果路径将是
    /home/user/PROJECT/code/out/vip.sas7bdat

    1-
    &dir.
    是一个宏变量。句点标志着变量的结束,因此
    &dir.out
    在运行时解析为
    /home/user/PROJECT/CODES/out
    。您的libname语句现在将libref
    out
    链接到此物理位置

    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文件系统上目录的绝对路径,因为它们从根节点
    /
    开始,以
    /
    结束。这一点如何得到证实