Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macros 将SAS宏分解为伪代码_Macros_Sas_Data Processing - Fatal编程技术网

Macros 将SAS宏分解为伪代码

Macros 将SAS宏分解为伪代码,macros,sas,data-processing,Macros,Sas,Data Processing,我需要将这个为一些变量添加后缀的SAS宏分解为伪代码,但其中有些部分我不完全理解 %macro add_suffix(lib,dsn, suffix); options pageno=1 nodate; OPTIONS OBS= 1; DATA GRIDWORK.TMP; SET &lib..&dsn.; RUN; proc sql noprint; select nvar into :num_vars f

我需要将这个为一些变量添加后缀的SAS宏分解为伪代码,但其中有些部分我不完全理解

%macro add_suffix(lib,dsn, suffix);
    options pageno=1 nodate;
    OPTIONS OBS= 1;
    DATA GRIDWORK.TMP;
    SET &lib..&dsn.;
    RUN;

    proc sql noprint;
    select nvar into :num_vars
        from dictionary.tables
            where libname="GRIDWORK" and
                memname="TMP";
    select distinct(name) into :var1-
        :var%TRIM(%LEFT(&num_vars))
    from dictionary.columns
        where libname="GRIDWORK" and
            memname="TMP";
    quit;

    run;

    OPTIONS OBS= MAX;
    proc datasets library=&LIB;
        modify &DSN;
        rename
            %do i=1 %to &num_vars;
                 &&var&i=&&var&i..&suffix
            %end;
        ;
    quit;

    run;

    proc datasets library=&LIB;
        modify &DSN;
        rename pers_gen_key&suffix = pers_gen_key;
    quit;

    run;

    proc sql;
         drop table gridwork.tmp;
    quit;
%mend add_suffix;
1) 在守则的这部分:

 DATA GRIDWORK.TMP;
 SET &lib..&dsn.;
 RUN;
如何将数据集设置为两个值?是否将GRIDWORK.TMP设置为&lib和&dsn的串联?这里的多个周期到底意味着什么

2) 我知道本节将变量存储在数组中:

proc sql noprint;
    select nvar into :num_vars
        from dictionary.tables
            where libname="GRIDWORK" and
                memname="TMP";
    select distinct(name) into :var1-
        :var%TRIM(%LEFT(&num_vars))
    from dictionary.columns
        where libname="GRIDWORK" and
            memname="TMP";
quit;
dictionary.tables和dictionary.columns究竟是如何工作的,在这种情况下它们之间有什么区别?是文档,我通读了它,但仍然很难理解代码的这一部分到底发生了什么

3) 在宏的末尾,我们有:

OPTIONS OBS= MAX;
proc datasets library=&LIB;
    modify &DSN;
    rename
        %do i=1 %to &num_vars;
            &&var&i=&&var&i..&suffix
        %end;
    ;
quit;
run;
是proc数据集程序的文档。它说它命名了程序处理的库。这是否意味着&dsn是&lib库的一部分?我想我不确定SAS中的库是如何工作的。它们是内置的还是用户定义的?为什么它们是必需的,我们不能自己修改&DSN吗

  • SAS有两个级别的引用,库名称和数据集名称。第一个宏变量指向库,第二个指向数据集名称。句点告诉宏处理器宏变量的结束位置,第二个句点用于将libname与数据集名称分开

  • 它不是存储在数组中,而是创建宏变量。字典表是关于表的元数据。我建议你看看它们。两个表之间的区别在于,表中包含关于数据集的信息,列中包含关于每个表中变量的信息

  • 库只是存储SAS数据集的目录/文件夹。这允许SAS引用不同的目录来保存文件,并允许用户在其数据上实施组织系统&dsn是&lib文件夹中的数据集


  • 我强烈建议您查看
    %put
    语句,并将其放在代码的各个部分中,以准确了解代码在做什么

    这是一个三个问题-请每次限制一个问题。这在很大程度上表明,您对SAS没有基本的了解;以上所有问题的答案都可以通过花几天时间阅读SAS文档和/或参加基本的SAS课程来获得和更多调试信息,您可以打开
    选项mlogic symbolgen macrogen。这可能有助于你理解发生了什么。@Joe,这里的正确协议是什么,如果我没有回答这个问题,现在删除我的答案吗?@Reeza在我看来,你不应该回答一个糟糕的问题。但是,这里真的没有硬性规定……:)老实说,可能80-90%的问题都不太合适,我们倾向于比理论上更宽松(如果是这样的话,或者一分钟内就全部结束了)。“为我编写代码”的问题太多了。@Joe对此表示抱歉,我一定会在以后提问之前进行更多研究。