小弟SAS入行较浅,宏程序使用不熟悉,下面一段程序,哪里出了问题,多谢各位大神指教,小弟感激不尽
{:3_48:}
DATA test;
  INFILE "C:\Users\Administrator\Desktop\测试数据集.txt";
  INPUT
    CN 1-2 DN 3-5 
    GP 6 SEX 7 @8 BIRTH yymmdd10. HEIGHT 18-22 .1 
    WEIGHT 23-27 .1;
LABEL
  cn="试验中心编号{{CN}}"
  dn="药物编号{{DN}}"
  gp="分组{{GP}}"
  sex="性别{{Sex}}"
  birth="(1=男,2=女)   出生日期{{Birth}}"
  height="身高{{Height}}"
  weight="cm        体 重{{Weight}}";
FORMAT
  birth yymmdd10.;
run;
%macro tformat;  *定义输出宏;
Proc format;
 Invalue g
   1=20
   2=40;  *定义分组变量 g的位置;
%mend tformat;
*定义宏 调用 univariate过程计算各组平均数、标准差、例数、四分位数、最大最小值;
%macro tmean(y, A, datain, dataout);
Proc univariate data=&datain noprint;
%by &A;
%var &y;
output out=&dataout mean=mean std=std min=min max=max
median=median q3=q3 q1 =q1 n=n;
data &dataout;
set &dataout nobs=nobs;
nu=nobs;
run;
%mend tmean;
%macro fc(invar, cvar, p);
%If &invar %then
%do;  %if inds=1 %then
%do;
row+&p;
%put #row@4 ' &cvar ';
row+1;
%end;
%put#row @7 ' Mean(STD) '
@(col-2) mean6.2
@(col+4)  std5.2 
#(row+1)@7 ' Median ' @(col-2 ) median6.2
#(row+2)@6 ' 25th-75th '
@(col-2) q1 6.2   q3 6.2
#(row+3)@7 'min-max'
@(col-2) min6.2  max6.2
#(row+4)@7  ' N '@(col+3) n3.;
%if inds=nu %then
%do; 
%put#(row+5) @2 75*_' ; '
inds=0;
%end;
%end;
%mend fc;
%Let dataana=test;
%tmean(height,GP,&dataana,tage);
%fc(theight,身高(CM),6);
proc print data=tage;
run;
相关 log如下
NOTE: 有 2 个从数据集 WORK.TAGE 读取的观测。
NOTE: 数据集 WORK.TAGE 有 2 个观测和 10 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间          0.00 秒
      CPU 时间          0.00 秒
ERROR: 在需要数值操作数的 %EVAL 函数或 %IF 条件中发现字符操作数。条件是: &invar
ERROR: 宏 FC 将终止执行。
982  %fc(height,身高,6);
983
984  proc print data=tage;
985  run;