📄 setmod.sas
字号:
/* Setmod - IVEware sasmod setup parsing macro */
%macro setmod;
%if (%bquote(&msg) eq ) %then %do; /* open log output file */
%let msg = %str(Can%'t) open log file;
%if (%sysfunc(filename(logref, &path..log)) eq 0) %then %do;
%let logfile = %sysfunc(fopen(&logref, o));
%if (&logfile ne 0) %then %let msg = ;
%end;
%end;
%if (%bquote(&msg) eq ) %then %do; /* write log introduction */
%let msg = %str(Can%'t) write log file;
%let line = %str( Iveware Multiple Imputation Regression Program);
%if (%sysfunc(fput(&logfile, &line)) eq 0) %then %do;
%if (%sysfunc(fwrite(&logfile)) eq 0) %then %do;
%let line = %str( Survey Research Center, Institute for Social Research);
%let rc = %sysfunc(fput(&logfile, &line));
%let rc = %sysfunc(fwrite(&logfile));
%let line = %str( University of Michigan);
%let rc = %sysfunc(fput(&logfile, &line));
%let rc = %sysfunc(fwrite(&logfile));
%let line = %str( Version 2.0, Copyright (c) 2005);
%let rc = %sysfunc(fput(&logfile, &line));
%let rc = %sysfunc(fwrite(&logfile));
%let rc = %sysfunc(fput(&logfile, ));
%let rc = %sysfunc(fwrite(&logfile));
%let line = %sysfunc(date(), weekdate17.), &systime;
%let rc = %sysfunc(fput(&logfile, %bquote(&line)));
%let rc = %sysfunc(fwrite(&logfile));
%let rc = %sysfunc(fput(&logfile, %str( Process setup)));
%let rc = %sysfunc(fwrite(&logfile));
%let msg = ;
%end;
%end;
%end;
%if (%bquote(&msg) eq ) %then %do; /* write intermediate setup file */
%let list = 1;
%if (&print eq none) %then %let list = 0;
%let print = ;
%let lsmeans = 0;
%let repeated = 0;
data _null_;
%if (&list) %then %do; /* write setup listing introduction */
file "&path..lst";
date = date();
time = time();
put "IVEware Setup Checker, " date date. ", " time time.;
put;
put "Setup listing:";
%end;
do while(1); /* loop through the setup lines */
%getset;
file "&path..con"; /* write output file */
put line;
if (upcase(scan(line, 1)) eq 'LSMEANS') then call symput('lsmeans', '1');
if (upcase(scan(line, 1)) eq 'REPEATED') then call symput('repeated', '1');
end;
run;
%end;
%if (%bquote(&msg) eq ) %then %do; /* open intermediate setup file */
%let msg = %str(Can%'t) open intermediate setup file;
%if (%sysfunc(filename(setref, &path..con)) eq 0) %then %do;
%if (%sysfunc(fileref(&setref)) eq 0) %then %do;
%let setfile = %sysfunc(fopen(&setref, i));
%if (&setfile ne 0) %then %let msg = ;
%end;
%end;
%end;
%if (%bquote(&msg) eq ) %then %do; /* open module output file */
%let msg = %str(Can%'t) open module file;
%if (%sysfunc(filename(modref, &path..mod)) eq 0) %then %do;
%let modfile = %sysfunc(fopen(&modref, o));
%if (&modfile ne 0) %then %let msg = ;
%end;
%end;
%if (%bquote(&msg) eq ) %then %do; /* process setup file */
%let key = ;
%let line = ;
%let result = ;
%let response = ;
%do %while(%bquote(&msg) eq and %bquote(%upcase(&key)) ne RUN); /* setup line loop */
%let msg = %str(Can%'t) read setup file; /* read setup line */
%if (%sysfunc(fread(&setfile)) eq 0) %then %if (%sysfunc(fget(&setfile, line, 32767)) eq 0) %then %do;
%let msg = ;
%let key = %scan(%bquote(&line), 1, %str( =;)); /* get keyword */
%if (%bquote(%upcase(&key)) eq DATAIN) %then %do; /* datain file(s) */
%if (&datain ne ) %then %let msg = Repeated datain statement;
%else %if (&procid ne ) %then %let msg = Datain must precede procedure;
%else %do;
%let count = 100;
%params;
%let datain = &result;
%let nmults = &count;
%end;
%end;
%else %if (%bquote(%upcase(&key)) eq ESTOUT) %then %do; /* estout file */
%if (&estout ne ) %then %let msg = Repeated estout statement;
%else %if (&procid ne ) %then %let msg = Estout must precede procedure;
%else %do;
%let count = 1;
%params;
%let estout = &result;
%end;
%end;
%else %if (%bquote(%upcase(&key)) eq BY) %then %do; /* by variable(s) */
%if (&by ne ) %then %let msg = Repeated by statement;
%else %if (&procid ne ) %then %let msg = By must precede procedure;
%else %do;
%let count = 100;
%params;
%let by = &result;
%let nbys = &count;
%end;
%end;
%else %if (%bquote(%upcase(&key)) eq STRATUM) %then %do; /* stratum variable */
%if (&stratum ne ) %then %let msg = Repeated stratum statement;
%else %if (&procid ne ) %then %let msg = Stratum must precede procedure;
%else %do;
%let count = 1;
%params;
%let stratum = &result;
%end;
%end;
%else %if (%bquote(%upcase(&key)) eq CLUSTER) %then %do; /* cluster variable */
%if (&cluster ne ) %then %let msg = Repeated cluster statement;
%else %if (&procid ne ) %then %let msg = Cluster must precede procedure;
%else %do;
%let count = 1;
%params;
%let cluster = &result;
%end;
%end;
%else %if (%bquote(%upcase(&key)) eq WEIGHT) %then %do; /* weight variable */
%if (&weight ne ) %then %let msg = Repeated weight statement;
%else %if (&procid ne ) %then %let msg = Weight must precede procedure;
%else %do;
%let count = 1;
%params;
%let weight = &result;
%end;
%end;
%else %if (%bquote(%upcase(&key)) eq TITLE) %then %do; /* title */
%if (%bquote(&title) ne ) %then %let msg = Repeated title statement;
%else %if (&procid ne ) %then %let msg = Title must precede procedure;
%else %do;
%let title = %qsubstr(%bquote(&line), 7, %length(%bquote(&line)) - 7);
%let title = %qleft(%bquote(&title));
%let title = %qtrim(&title);
%end;
%end;
%else %if (%bquote(%upcase(&key)) eq PRINT) %then %do; /* print */
%if (%bquote(&print) ne ) %then %let msg = Repeated print statement;
%else %if (&procid ne ) %then %let msg = Print must precede procedure;
%else %do;
%let print = %qsubstr(&line, 7, %length(%bquote(&line)) - 7);
%let print = %qleft(%bquote(&print));
%let print = %qtrim(&print);
%let print = %upcase(%qsubstr(&print, 1, 2));
%if (&print eq NO) %then %let print = none;
%else %if (&print eq ST) %then %let print = standard;
%else %if (&print eq DE or &print eq AL) %then %let print = details;
%else %let msg = Print parameter not recognized;
%end;
%end;
%else %if (%bquote(%upcase(&key)) eq PROC) %then %do; /* procedure statement */
%if (&procid ne ) %then %let msg = Repeated procedure statement;
%else %if (&datain eq ) %then %let msg = Datain must precede procedure;
%else %do; /* check subsequent parameters for "data=" */
%let quit = false;
%let begin = 1;
%let end = %index(&line, %str(/));
%if (&end eq 0) %then %let end = %length(%bquote(&line));
%do %until (&quit eq true);
%let subline = %qsubstr(&line, &begin, &end-&begin+1);
%let equal = %index(&subline, %str(=));
%if (&equal eq 0) %then %let quit = true;
%else %do;
%let range = %qsubstr(&line, &begin, &equal-&begin+1);
%let begin = %eval(&equal + 1);
%let count = 0;
%do %until(¶m eq );
%let count = %eval(&count + 1);
%let param = %scan(%bquote(&range), &count, %str( =));
%end;
%if (&count gt 1) %then %let param = %scan(%bquote(&range), &count-1, %str( =));
%if (%upcase(¶m) eq DATA) %then %do;
%let msg = Sasmod %str(doesn%'t) accept proc statement "data=" parameter;
%let quit = true;
%end;
%end;
%end;
%end;
%if (&msg eq ) %then %do;
%let procid = %scan(%bquote(&line), 2, %str( ;)); /* get procedure name */
%if (%bquote(%upcase(&procid)) eq CALIS) %then %do; /* proc calis */
%let line = %qsubstr(&line, 1, %length(%bquote(&line)) - 1);
%let line = %qtrim(&line);
%let line = %bquote(&line) outest=est1 noprint%str(;);
%end;
%else %if (%bquote(%upcase(&procid)) eq CATMOD) %then %do; /* proc catmod */
%if (&sysver eq 6.12) %then
%let msg = Sasmod %str(doesn%'t) support proc catmod in SAS V6.12;
%else %do;
%let ods = ods select none%str(;);
%let rc = %sysfunc(fput(&modfile, %bquote(&ods)));
%let rc = %sysfunc(fwrite(&modfile));
%let ods = ods output Estimates = est1%str(;);
%let rc = %sysfunc(fput(&modfile, %bquote(&ods)));
%let rc = %sysfunc(fwrite(&modfile));
%if (&cluster eq and &stratum eq and &weight eq ) %then %do;
%let ods = ods output CovB = covb1%str(;);
%let rc = %sysfunc(fput(&modfile, %bquote(&ods)));
%let rc = %sysfunc(fwrite(&modfile));
%end;
%let ods = ods output MaxLikelihood = like1%str(;);
%let rc = %sysfunc(fput(&modfile, %bquote(&ods)));
%let rc = %sysfunc(fwrite(&modfile));
%end;
%end;
%else %if (%bquote(%upcase(&procid)) eq GENMOD) %then %do; /* proc genmod */
%if (&sysver eq 6.12) %then
%let msg = Sasmod %str(doesn%'t) support proc genmod in SAS V6.12;
%else %do;
%let ods = ods select none%str(;);
%let rc = %sysfunc(fput(&modfile, %bquote(&ods)));
%let rc = %sysfunc(fwrite(&modfile));
%if (&repeated) %then %let ods = ods output GEEEmpPEst = est1%str(;);
%else %let ods = ods output ParameterEstimates = est1%str(;);
%let rc = %sysfunc(fput(&modfile, %bquote(&ods)));
%let rc = %sysfunc(fwrite(&modfile));
%if (&lsmeans) %then %do;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -