【问题标题】:What does "%" in front of the variable in SAS pass-through exactly do / or means ?SAS pass-through 中变量前面的“%”到底是做什么/或意味着什么?
【发布时间】:2012-03-06 15:22:50
【问题描述】:

“%”到底是什么意思?我从其他人那里得到了这段代码,代码运行良好,但我只是不明白为什么必须将 % 放在变量前面。如果它是 %macro,我在库中看不到任何宏代码。任何解释都会有所帮助

proc sql;
  connect to odbc as d(datasrc=source);
  create table out as select * from connection to d
  (
    select
      t.id,t.rule_id,
      %application_id,
      t.date,
      %dpv, %dpvfn1, %dpvfn2, %dpvfn3,
      %AddressValid,%AddressValidMsg,%AddressType,    
      from &db2 t
      join &db3 dxs on t.id=dxs.id
 left join &db4 dxr on t.id=dxr.id
  );
  disconnect from d;
quit;

【问题讨论】:

  • 你连接的是什么类型的 DBMS?
  • 另外,如果你想仔细检查它是否是一个宏调用,不妨试试%put %application_id; 之类的东西,看看它是否会在日志中写入任何内容
  • 最后,您可以通过自动调用工具检查是否有其他宏正在加载:%put %sysfunc(getoption(sasautos));
  • %put %track_id; cast( substr(cast(uncompress(id) as char(80000)), (locate('',cast(uncompress(id) as char(80000))) + 13), locate(' ',cast(uncompress(id) as char(80000))) - locate('' ,cast(uncompress(id) as char(80000))) - 13 ) as char(12) ) as track_id .. ...所以这是一个宏对吗?
  • 以上是我得到的输出。所以它是一个宏?在哪里可以找到原始代码?我不经常使用宏我知道如何通过 %macroname(var=blah); 创建和使用宏.但这是不同的。任何解释都会有所帮助,谢谢。

标签: sql macros sas pass-through


【解决方案1】:

%宏 X; VAR %修复;

上面的例子是一个宏的定义。

在您的问题中,所有带有 % 的列实际上都在进行宏调用并将调用替换为其宏定义中存在的值。例如,在您的选择查询中...

select
      t.id,t.rule_id,
      %application_id,
      t.date,
      %dpv, %dpvfn1, %dpvfn2, %dpvfn3,
      %AddressValid,%AddressValidMsg,%AddressType,    
      from &db2 t
      join &db3 dxs on t.id=dxs.id
 left join &db4 dxr on t.id=dxr.id

%application_id,%dpv, %dpvfn1, %dpvfn2, %dpvfn3,%AddressValid,%AddressValidMsg,%AddressType

以上所有这些宏调用都将检索它们相应的定义并将它们替换为您选择的列的位置...

【讨论】:

  • 谢谢,我认为应该有更好的方法来做到这一点?
猜你喜欢
  • 1970-01-01
  • 2017-11-05
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 2019-04-08
  • 2014-03-17
  • 2012-03-19
  • 2010-10-22
相关资源
最近更新 更多