0

我在两个不同的库中有相同的表名,我想在开始时使用一个条件来选择要使用的库(SAS Enterprise Guide)。是否可以使用库的变量来实现如下所示?

如果(txt = 'tst')

从 TST.TableName 中选择 *

别的

Select * form DEV.TableName

4

1 回答 1

1

执行此操作的最佳方法因定义而异txt。如果您根据用户输入选择此选项(在您的示例中,用户选择 TEST 或 DEV(或 PROD)数据库指向),那么 Enterprise Guide 中的最佳方法是创建提示以创建宏变量,或者其次直接创建宏变量。

Ben Cochran 的论文Be Prompt Now: Creating and Using Prompts in SAS Enterprise Guide很好地介绍了该主题以及其他在线资源。您可以设置一个提示,询问用户指向哪个环境,然后它将定义一个具有您选择的值的宏变量。然后将提示添加到您需要与之相关的程序中,然后它就可以工作了。

因此,在您的情况下,您可以让它设置一个&env.包含表名(TSTDEV)值的变量。您也可以让它控制 libname 值本身(因此您无需更改使用的 libname,而是更改 libname 指向的文件夹或数据库)。


如果您不在 EG 中,或者出于某种原因不想使用提示符,您同样可以自己分配该宏变量。

%let env = TST;

无论哪种方式,一旦你&ENV=TST建立起来,你只需在开放代码中使用它:

proc sql;
  select * from &ENV..TableName;
quit;

或者,就像我说的,您可以根据宏变量分配 libname 并在代码中使用单个 libname;这通常更干净,尽管它会留下自己的并发症。

于 2014-10-09T19:50:42.457 回答