Компиляция кода SAS SCL программно - PullRequest
2 голосов
/ 28 апреля 2009

Существует ли программный способ компиляции кода SAS 9.1.3 SCL (N.B. не обычный код SAS) в Windows? Единственный способ сделать это - использовать SAS GUI: у нас есть Perl-скрипт, который отправляет нажатия клавиш в UI. Хотя это работает (вроде), оно уродливо и подвержено ошибкам и слишком хрупко, чтобы добавить его в наш скрипт автоматической сборки.

РЕДАКТИРОВАТЬ: мой оригинальный вопрос, вероятно, был несколько неясным. Я в курсе proc build; моя проблема заключается в том, чтобы сначала поместить какой-либо простой текст в каталог SAS в виде записи SCL.

Ответы [ 2 ]

4 голосов
/ 29 апреля 2009

Я обнаружил, что это проблема с курицей и яйцом. Я обнаружил, что можно получить простой текст в записи SCL, используя уже существующую запись SCL ...

У меня есть установка, где я читаю и пишу код SCL в записях каталога, из и в текстовые файлы. Я использую это для целей контроля версий (CVS).

Хотя CVS в основном используется для простого текстового кода, он также может обрабатывать двоичные файлы. Таким образом, я сделал запись SCL (называемую FILE2SCL), которая может импортировать простой текст в другие записи SCL. Затем я PROC CPORT 'записал эту запись SCL в двоичный файл и проверил ее в CVS.

Таким образом, я всегда могу программно извлечь эту запись SCL из файла CPORT и использовать эту запись SCL для импорта кода SCL из простого текста в другие записи SCL. После этого я могу использовать PROC BUILD для компиляции записи SCL, точно так же, как вы упомянули о себе.

Моя запись FILE2SCL выглядит так:

INIT:
  /***************************************************************/
  /*                                                             */
  /* Call this SCL like this:                                    */
  /* %let srcFile=D:\work\dummy.scl;                             */
  /* %let dstEntry=WORK.NEW.DUMMY.SCL;                           */
  /* proc display catalog=work.cat.file2scl.scl;                 */
  /* run;                                                        */
  /*                                                             */
  /***************************************************************/

  length Rc           8;
  length theFile  $ 200;
  length theEntry $ 128;

  theFile=symget('SRCFILE');   * Source file *;
  theEntry=symget('DSTENTRY'); * Destination entry *;

  * Assign filename *;
  Rc=filename('temp',theFile);

  * Include external file into preview buffer *;
  Rc=PREVIEW('INCLUDE','temp');
  * Save contents of preview buffer to SCL entry *;
  Rc=PREVIEW('SAVE',theEntry);
  Rc=PREVIEW('CLEAR');
  Rc=PREVIEW('CLOSE');

  * Deassign filename *;
  Rc=filename('temp','');
return;

Комментарий объясняет, как его использовать: Начните с установки макропеременной SAS "srcFile", которая будет содержать путь к файлу исходного кода SCL, и другой макропеременной "dstEntry", которая будет содержать путь к месту, где должна быть ваша запись SCL. Затем PROC DISPLAY запись FILE2SCL, и она импортирует ваш исходный код SCL в указанную запись SCL, а затем вы можете скомпилировать его с помощью PROC BUILD.

0 голосов
/ 11 мая 2009

Также вы можете проверить, используя Eclipse и плагин ESLink . Он был разработан специально для этой цели (хранение кода SCL в обычных файлах для контроля версий с возможностью компиляции в каталог).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...