以下内容:
proc sql; describe table sashelp.class;
生成(在日志中):
create table SASHELP.CLASS( label='Student Data' bufsize=4096 )
(
Name char(8),
Sex char(1),
Age num,
Height num,
Weight num
);
任何完整性约束都会发送到输出窗口 - 可通过以下方式在SAS中访问:
ods output IntegrityConstraints=MyDataset;
如果没有重定向日志(proc printto
)或构建生成器(通过proc contents
或字典/ sashelp视图),还有其他方法可以提取上述DDL吗?
我尝试过ODS TRACE,但无法看到任何其他输出被创建。
答案 0 :(得分:2)
如果您乐意重定向日志(尽管是暂时的),则以下内容可能会有用:
/* macro */
%macro get_ddl(ds=,outfile=);
filename tmp temp;
proc printto log=tmp;quit;
proc sql; describe table &ds;
proc printto log=log;quit;
data _null_;
infile tmp;
file &outfile;
input;
if _infile_=:'NOTE: SQL table ' then start+1;
else if _infile_=:'NOTE: PROCEDURE SQL used' then stop;
else if index(_infile_,' The SAS System ') then delete;
else if start=1 then put _infile_;
putlog _infile_;
run;
filename tmp;
%mend;
/* test */
proc sql;
create table people
(
name char(14),
gender char(6),
hired num,
jobtype char(1) not null,
status char(10),
constraint prim_key primary key(name),
constraint gender check(gender in ('male' 'female')),
constraint status check(status in ('permanent'
'temporary' 'terminated'))
);
%get_ddl(ds=people,outfile="C:\temp\test.ddl");
请注意,列约束不在上面的输出上(它们需要从IntegrityConstraints输出派生)。
虽然这个信息不是“可重定向”的,但确实有点奇怪..