Я обнаружил, что это проблема с курицей и яйцом. Я обнаружил, что можно получить простой текст в записи 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.