- 阅读权限
- 255
- 威望
- 0 级
- 论坛币
- 6 个
- 通用积分
- 6.1256
- 学术水平
- 0 点
- 热心指数
- 0 点
- 信用等级
- 0 点
- 经验
- 9678 点
- 帖子
- 184
- 精华
- 0
- 在线时间
- 211 小时
- 注册时间
- 2012-6-2
- 最后登录
- 2023-11-24
博士生
还不是VIP/贵宾
- 威望
- 0 级
- 论坛币
 - 6 个
- 通用积分
- 6.1256
- 学术水平
- 0 点
- 热心指数
- 0 点
- 信用等级
- 0 点
- 经验
- 9678 点
- 帖子
- 184
- 精华
- 0
- 在线时间
- 211 小时
- 注册时间
- 2012-6-2
- 最后登录
- 2023-11-24
 | 开心 2020-10-14 16:17:36 |
|---|
签到天数: 127 天 连续签到: 1 天 [LV.7]常住居民III
|
5论坛币
|
小弟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;
|
|