首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SAS中使用宏生成Union语句

问在SAS中使用宏生成Union语句
EN

Stack Overflow用户
提问于 2019-09-10 23:01:01
回答 1查看 185关注 0票数 0

我有一个名为mylib.common_noun的表,其中包含大约2000条记录,不过这个值可以每两周更改一次。我正在尝试生成与mylib.common_noun中的记录计数相同数量的union语句

mylib.common_noun的结构。两列:关键字和dname

代码语言:javascript
复制
Keywords DNAME
A        sas1
B        sas2
C        sas3

例如,假设mylib.common_noun包含3条记录,那么它应该基于变量dname生成union语句,然后运行以下代码

代码语言:javascript
复制
proc sql;
create table mylib.test_union as (select * from mylib.sas1
union
select * from chug.sas2
union
select * from chug.sas3);quit;

我根据建议运行了以下代码,但它不起作用。

代码语言:javascript
复制
filename code temp;
data _null_;
    file code;
    set mylib.common_noun;
    if _n_>1 then
        put 'create table mylib.test_union as';
    else put 'union '@;
    put 'select * from ' dname;

run;
proc sql;
    OPTIONS SOURCE2;

    %include code;
    ;
quit;

日志中的错误:

代码语言:javascript
复制
  40            %include code;
    NOTE: %INCLUDE (level 1) file CODE is file 
    41        +union select * from mylib.sas_out1
               _____
               180
    ERROR 180-322: Statement is not valid or it is used out of proper order.

    42        +create table mylib.test_union as
    43        +select * from mylib.sas_out2
    44        +create table mylib.test_union as
    45        +select * from mylib.sas_out3

不确定如何让它工作

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-10 23:46:27

听起来你需要从数据中生成代码。虽然您可以使用宏逻辑生成代码,但只使用常规SAS语句生成代码可能会更容易。

您没有描述DATASET的结构,所以让我们假设它有一个名为chug.claimants的变量,其值类似于"chug.sas_claimants2“。如果不是,那么只需添加一些逻辑,以便从它所具有的变量创建这样的值。

代码语言:javascript
复制
filename code temp;
data _null_;
  file code ;
  set chug.claimants ;
  if _n_=1 then put 'create table chug.test as' ;
  else put 'union ' @ ;
  put 'select * from ' dataset ;
run;
proc sql ;
%include code ;
  ;
quit;

不确定PROC SQL代码是否是生成的最佳代码。为什么不直接生成一个SET语句呢?

代码语言:javascript
复制
filename code temp;
data _null_;
  file code ;
  set chug.claimants ;
  if _n_=1 then put 'set ';
  put dataset ;
run;
data chug.test ;
%include code ;
  ;
run;

您也可以使用call execute()来生成代码,但是这样就没有办法在生成和执行阶段之间停下来检查生成的代码。或者利用PUT语句的报告编写功能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57873526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档