PROC SCAPROC 不读取使用 PROC SQL 创建的视图



我正在使用SCAPROC构建一个工具来自动化SAS作业之间的沿袭,在测试过程中,我发现如果使用proc-sql创建视图,SCAPROC不会捕获它的输入,我最终得到的是没有输入的作业。

有人知道如何绕过这个吗?

感谢

视图不涉及处理输入数据,因此SCAPROC会延迟解决它,直到它实际使用为止,这是有道理的。不幸的是,它与数据步骤视图不一致,但这并非不可逾越。

使用此代码:

proc scaproc;
record 'h:record.txt' attr;
run;

data test;
set sashelp.class;
run;
data testv/view=testv;
set sashelp.class;
run;
data result;
set testv;
run;
proc sql;
create view testv_sql as 
select * from sashelp.class;
quit;
data result_sql;
set testv_sql;
run;
proc scaproc;
write;
run;

您可以看到这个输出,围绕我们使用视图的数据步骤:

/* JOBSPLIT: TASKSTARTTIME 16JUL2021:09:46:59.00 */
/* JOBSPLIT: DATASET INPUT MULTI WORK.TESTV_SQL.VIEW */
/* JOBSPLIT: LIBNAME WORK V9 '...' */
/* JOBSPLIT: DATASET INPUT SEQ #C00001.CLASS.DATA */
/* JOBSPLIT: LIBNAME #C00001 V9 '...' */
/* JOBSPLIT: CONCATMEM #C00001 SASHELP */
/* JOBSPLIT: LIBNAME SASHELP V9 '( ... )' */
/* JOBSPLIT: DATASET INPUT SEQ SASHELP.CLASS.DATA */
/* JOBSPLIT: LIBNAME SASHELP V9 '( ... )' */
/* JOBSPLIT: DATASET OUTPUT SEQ WORK.RESULT_SQL.DATA */
/* JOBSPLIT: LIBNAME WORK V9 '...' */
/* JOBSPLIT: FILE OUTPUT h:record.txt */
/* JOBSPLIT: ATTR WORK.TESTV_SQL.VIEW INPUT VARIABLE:Name TYPE:CHARACTER LENGTH:8 LABEL: FORMAT: INFORMAT: */
/* JOBSPLIT: ATTR WORK.TESTV_SQL.VIEW INPUT VARIABLE:Sex TYPE:CHARACTER LENGTH:1 LABEL: FORMAT: INFORMAT: */
/* JOBSPLIT: ATTR WORK.TESTV_SQL.VIEW INPUT VARIABLE:Age TYPE:NUMERIC LENGTH:8 LABEL: FORMAT: INFORMAT: */
/* JOBSPLIT: ATTR WORK.TESTV_SQL.VIEW INPUT VARIABLE:Height TYPE:NUMERIC LENGTH:8 LABEL: FORMAT: INFORMAT: */
/* JOBSPLIT: ATTR WORK.TESTV_SQL.VIEW INPUT VARIABLE:Weight TYPE:NUMERIC LENGTH:8 LABEL: FORMAT: INFORMAT: */
/* JOBSPLIT: ATTR #C00001.CLASS.DATA INPUT VARIABLE:Name TYPE:CHARACTER LENGTH:8 LABEL: FORMAT: INFORMAT: */
/* JOBSPLIT: ATTR #C00001.CLASS.DATA INPUT VARIABLE:Sex TYPE:CHARACTER LENGTH:1 LABEL: FORMAT: INFORMAT: */
/* JOBSPLIT: ATTR #C00001.CLASS.DATA INPUT VARIABLE:Age TYPE:NUMERIC LENGTH:8 LABEL: FORMAT: INFORMAT: */
/* JOBSPLIT: ATTR #C00001.CLASS.DATA INPUT VARIABLE:Height TYPE:NUMERIC LENGTH:8 LABEL: FORMAT: INFORMAT: */
/* JOBSPLIT: ATTR #C00001.CLASS.DATA INPUT VARIABLE:Weight TYPE:NUMERIC LENGTH:8 LABEL: FORMAT: INFORMAT: */
/* JOBSPLIT: ATTR SASHELP.CLASS.DATA INPUT VARIABLE:Name TYPE:CHARACTER LENGTH:8 LABEL: FORMAT: INFORMAT: */
/* JOBSPLIT: ATTR SASHELP.CLASS.DATA INPUT VARIABLE:Sex TYPE:CHARACTER LENGTH:1 LABEL: FORMAT: INFORMAT: */
/* JOBSPLIT: ATTR SASHELP.CLASS.DATA INPUT VARIABLE:Age TYPE:NUMERIC LENGTH:8 LABEL: FORMAT: INFORMAT: */
/* JOBSPLIT: ATTR SASHELP.CLASS.DATA INPUT VARIABLE:Height TYPE:NUMERIC LENGTH:8 LABEL: FORMAT: INFORMAT: */
/* JOBSPLIT: ATTR SASHELP.CLASS.DATA INPUT VARIABLE:Weight TYPE:NUMERIC LENGTH:8 LABEL: FORMAT: INFORMAT: */
/* JOBSPLIT: ATTR WORK.RESULT_SQL.DATA OUTPUT VARIABLE:Name TYPE:CHARACTER LENGTH:8 LABEL: FORMAT: INFORMAT: */
/* JOBSPLIT: ATTR WORK.RESULT_SQL.DATA OUTPUT VARIABLE:Sex TYPE:CHARACTER LENGTH:1 LABEL: FORMAT: INFORMAT: */
/* JOBSPLIT: ATTR WORK.RESULT_SQL.DATA OUTPUT VARIABLE:Age TYPE:NUMERIC LENGTH:8 LABEL: FORMAT: INFORMAT: */
/* JOBSPLIT: ATTR WORK.RESULT_SQL.DATA OUTPUT VARIABLE:Height TYPE:NUMERIC LENGTH:8 LABEL: FORMAT: INFORMAT: */
/* JOBSPLIT: ATTR WORK.RESULT_SQL.DATA OUTPUT VARIABLE:Weight TYPE:NUMERIC LENGTH:8 LABEL: FORMAT: INFORMAT: */
/* JOBSPLIT: SYMBOL GET SYS_SQL_UNPUT_TRACE */
/* JOBSPLIT: SYMBOL GET SQLMAGIC */
/* JOBSPLIT: ELAPSED 19  */
/* JOBSPLIT: PROCNAME DATASTEP */
/* JOBSPLIT: STEP SOURCE FOLLOWS */

这为您提供了该数据步骤的输入——通过视图传递的数据集——这将是该数据步骤正确的输入。

如果这对您来说是一个大问题,您可以在PROC SQL视图之前的数据步骤中创建一个完整的直通视图,然后在沿袭中将其视为真正的输入(忽略SQL创建的视图(。

data result_sql;
set testv_pass;
run;

这将为您提供所需的内容(输入和输出(。

最新更新