2014-10-09 3 views
0

У меня есть одно и то же имя таблицы в двух разных библиотеках, и я хочу сначала использовать условие, чтобы выбрать, какую библиотеку использовать (SAS Enterprise Guide). Можно ли использовать переменную для библиотеки для достижения чего-то вроде ниже?SAS: Условный выбор библиотеки

IF (TXT = «TST")

Select * от TST.TableName

ELSE

Select * Форма DEV.TableName

ответ

1

Лучший способ сделать это изменяется в зависимости от что определяет txt.Если вы выбираете это на основе пользовательского ввода (в вашем примере пользователь выбирает базу данных TEST или DEV (или PROD), чтобы указать на), то лучшим способом в Enterprise Guide является создание приглашения для создания макропеременной , или, во-вторых, d прямое создание макропеременной.

Статья Бен Кокран Be Prompt Now: Creating and Using Prompts in SAS Enterprise Guide - хорошее введение в эту тему, а также другие источники в Интернете. Вы можете настроить приглашение, запрашивающее у пользователя, на какую среду указывать, а затем он будет определять макропеременная со значением по вашему выбору. Затем добавьте приглашение в программу, с которой вам нужно, чтобы она была связана, и presto, она работает.

Итак, в вашем случае вы можете установить переменную &env., которая содержит значение имени таблицы (TST или DEV). Вы также можете управлять им самим именем libname (поэтому вы не изменяете, какое имя libname используется, но вместо этого вы изменяете, какую папку или базу данных указывается в имени libname).


Если вы не в ЭГ, или если вы не хотите использовать подсказку для этого по какой-либо причине, вы так же можете назначить эту макропеременную самостоятельно.

%let env = TST; 

В любом случае, как только вы получили &ENV=TST установили, вы просто использовать его в открытом коде:

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

Или, как я сказал, вы могли бы назначить Имя_библиотеки на основе макро переменной и использовать единый libname в коде; это часто чище, хотя и оставляет свои осложнения.

+0

Большое спасибо за хороший ответ! :) – Sebastian

Смежные вопросы