Как я могу вызвать новую таблицу из другой подсказки? - PullRequest
1 голос
/ 10 июля 2019

Доброе утро, эксперты.

У меня есть несколько ежемесячных таблиц.Некоторые из них называются Alpha_YYYYMM, а другие Beta_YYYY_MM.При вызове этих таблиц я использую два приглашения к переменным, A и B, где разность составляет только «_».Как я могу вызвать таблицу Alpha и Beta, используя только одну подсказку в SAS SQL?В настоящее время я называю таблицы как:

PROC SQL;
   CREATE TABLE WORK.ALPHA_CURRENT_MONTH AS 
   SELECT DISTINCT *
        FROM PMIFDMSL.ALPHA_δ
QUIT;
PROC SQL;
   CREATE TABLE WORK.BETA_CURRENT_MONTH AS 
   SELECT DISTINCT *
        FROM PMIFDMSL.BETA_&del_ta;
QUIT;

Я уже пробовал:

PROC SQL;
   CREATE TABLE WORK.ALPHA_CURRENT_MONTH AS 
   SELECT DISTINCT *
        FROM PMIFDMSL.ALPHA_δ
QUIT;
%let a=%qsubstr(&delta,1,4);
%let b=%qsubstr(&delta,5,2);
%let del_ta=&a_&b;
PROC SQL;
   CREATE TABLE WORK.BETA_CURRENT_MONTH AS 
   SELECT DISTINCT *
        FROM AREATEMP.BETA_&del_ta;
QUIT;

и другие комбинации.

Но я продолжаю получать это сообщение об ошибке:

43          FROM AREATEMP.BETA_&del_ta;
NOTE: PROC SQL set option NOEXEC and will continue to check the syntax of statements.
NOTE: Line generated by the macro variable "DEL_TA".
43          AREATEMP.BETA_2019_06)
                                           ____
                                           22
                                              ____
                                              76
ERROR 22-322: Syntax error, expecting one of the following: a name, ;, (, ',', ANSIMISS, AS, CROSS, EXCEPT, FULL, GROUP, HAVING, 
              INNER, INTERSECT, JOIN, LEFT, NATURAL, NOMISS, ORDER, OUTER, RIGHT, UNION, WHERE.  

ERROR 76-322: Syntax error, statement will be ignored.

Заранее спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 10 июля 2019

Я думаю, что это является причиной конкатенации макропеременной в %let del_ta=&a_&b;.

Попробуйте использовать:

%let del_ta=%sysfunc(catx(_,%nrstr(%superq(a)),%nrstr(%superq(b))));
0 голосов
/ 10 июля 2019

Цитирование макросов, вероятно, сбивает с толку компилятора, заставляя его думать, что BETA_&del_ta расширяется в более чем одно слово, хотя пробелов нет.

Также вы не определили макропеременную с именем A_, которую вы используете в своем третьем операторе %LET.

Попробуйте вместо этого.

%let a=%substr(&delta,1,4);
%let b=%substr(&delta,5,2);
%let del_ta=&a._&b;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...