Как правильно заключить в кавычки параметры при передаче их другой программе SAS при вызове из Linux - PullRequest
0 голосов
/ 19 октября 2018

Мы используем SAS 9.xxxx.

Я нахожусь в системе Linux, вызывающей программу SAS из файла cronfile.

Эта программа SAS передает аргументы программе SAS.призвание.Мне было трудно передавать значения из одной программы SAS в другую в этом методе.

Вот строки из каждой программы.

В файле cronfile строка выглядит так:

17 * 18 10 * /usr/bin/bash;. ~/.bash_profile; cd /sasdata/mids_output02/rjs;sas -noterminal -rsasuser -batch -log cron_rpts.log -print cron_rpts.lst -sysparm "param1=2500,param2=2"
 cron_rpts.sas

Вот эффективные строки из программы ее вызова.

%macro set_constants;
  %global param1 param2;

  %* Get param1 and param2 from sysparm. sysparmpairs does not deal well with quotes, so quote the dates appropriately;
  %sysparmpairs();
  %let param1 = %bquote(')&param1.%bquote(');
  %let param2 = %bquote(')&param2.%bquote(');
%mend;

  %set_constants;                         /* Set macro variables for environment          */
  %put dates=&param1. &param2.;
  /****************************************************************************************************************************************/
  /** Fetch raw pulls of data--transactions (10 min), dnb (33 min), FDIC                                                                 **/
  /****************************************************************************************************************************************/
  systask command 'sas -noterminal -rsasuser -batch -log simple_run_2.log -print simple_run_2.lst -sysparm "param1=&param1.,param2=&param2. simple_run_2.sas' taskname = sim
ple_run_2;

Когда я потом просматриваю журнал, я вижу следующее:

WARNING: Apparent symbolic reference PARAM1 not resolved.
^L2                                                          The SAS System                           20:06 Thursday, October 18, 2018

WARNING: Apparent symbolic reference PARAM2 not resolved.
WARNING: Apparent symbolic reference PARAM1 not resolved.
WARNING: Apparent symbolic reference PARAM2 not resolved.
WARNING: Apparent symbolic reference PARAM1 not resolved.

Как передать param1 и param2 при первом вызове программы simple_run_2.sas, чтобы параметрыпередаст свои значения?

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

ОК, так что вы все были правы.

Вот окончательное решение, которое передало значения на всем протяжении ...

systask command "sas -noterminal -rsasuser -batch -log simple_run_2.log -print simple_run_2.lst -sysparm 'param1=&param1.,param2=&param2.' simple_run_2.sas" taskname = simple_run_
2;

Исходное утверждение для я использовал для этогоin был перевернут, и это, казалось, работало только для вызова команды, но, очевидно, если вы собираетесь передавать параметры, а не только значения, вы должны обратить кавычки.Где, черт возьми, вы бы выглядели примерно так?

Еще раз спасибо!

0 голосов
/ 19 октября 2018

Триггеры макросов не оцениваются внутри одинарных кавычек.Вместо этого используйте двойные кавычки.Для внутренних кавычек либо переключите их на одинарные кавычки, либо удвойте их.

systask command 
"sas -noterminal -rsasuser -batch -log simple_run_2.log -print simple_run_2.lst
 -sysparm ""param1=&param1.,param2=&param2."" simple_run_2.sas
" taskname = simple_run_2
;
...