全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2687 4
2017-12-23
参照汪海波《SAS统计分析与应用从入门到精通》的example6_7代码,但是按照书本的代码运行不了,所以试着自己改了一下,但没有预期的效果,所以想请教各位,代码应该怎么改?
%macro f(database=,var=,group=);

proc sort data=&database;
by &group;
run;

proc univariate data=&database noprint;
var &var;
by &group;
output
out=result
n=n nmiss=nmiss mean=mean std=std median=median q1=q1 q3=q3 min=min max=max;
run;

data a(where=(&group=1)) b(where=(&group=2));
set result;
format mean 6.1 median 6.1 std 6.1;
run;

data ab;
set a b;
run;

data _null_;
file print notitle;
put #1 @5 "指标"  @22  "子公司1"  @42 "子公司2"
    #2 @5 "例数(缺失)" @22 NA '(' nmissa')' @42 NB '(' nmissb')'
    #3 @5 "均数(标准差)" @22 meanA '(' stda')' @42 meanB '(' stdB')'
    #4 @5 "中位数(Q1-Q3)" @22 mediana '(' q1a '~' q3a')' @42 medianb '(' q1b '~' q3b')'
        #5 @5 "最小值-最大值" @22 mina '~' maxa @42 minb '~' maxb;
run;

%mend f;
data example6_7;
do company=1 to 5;
do month=1 to 12;
input sales @@;
output;
end;end;
cards;
21 23 25 28 31 34 37 41 45 50 54 60
22 25 29 33 38 44 51 59 67 77 89 102
23 28 33 40 48 57 69 82 99 119 142 171
24 30 38 47 59 73 92 114 143 179 224 279
25 33 42 55 71 93 121 157 204 265 345 448
;
run;
%f(database=example6_7,var=sales,group=company);
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2017-12-23 00:59:09
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-12-23 11:39:33
%macro f(database=,var=,group=);


proc sort data=&database;
by &group;
run;


proc univariate data=&database noprint;
var &var;
by &group;
output out=result
n=n nmiss=nmiss mean=mean std=std median=median q1=q1 q3=q3 min=min max=max;
run;


data a(where=(&group=1)) b(where=(&group=2));
set result;
format mean 6.1 median 6.1 std 6.1;
run;


data ab;
merge a (rename=(n=na nmiss=nmissa mean=meana std=stda median=mediana q1=q1a q3=q3a min=mina max=maxa))
b (rename=(n=nb nmiss=nmissb mean=meanb std=stdb median=medianb q1=q1b q3=q3b min=minb max=maxb));
run;


data _null_;
set AB;
file print notitle;
put #1 @5 "指标"  @22  "子公司1"  @42 "子公司2"
    #2 @5 "例数(缺失)" @22 NA '(' nmissa')' @42 NB '(' nmissb')'
    #3 @5 "均数(标准差)" @22 meanA '(' stda')' @42 meanB '(' stdB')'
    #4 @5 "中位数(Q1-Q3)" @22 mediana '(' q1a '~' q3a')' @42 medianb '(' q1b '~' q3b')'
        #5 @5 "最小值-最大值" @22 mina '~' maxa @42 minb '~' maxb;
run;


%mend f;
data example6_7;
do company=1 to 5;
do month=1 to 12;
input sales @@;
output;
end;end;
cards;
21 23 25 28 31 34 37 41 45 50 54 60
22 25 29 33 38 44 51 59 67 77 89 102
23 28 33 40 48 57 69 82 99 119 142 171
24 30 38 47 59 73 92 114 143 179 224 279
25 33 42 55 71 93 121 157 204 265 345 448
;
run;
%f(database=example6_7,var=sales,group=company);

原因说明:
没有通过set 语句,将表AB中的参数带过来,所以日志里报错,变量未初始化:
NOTE: 变量 NA 未初始化。
NOTE: 变量 nmissa 未初始化。
NOTE: 变量 NB 未初始化。
NOTE: 变量 nmissb 未初始化。
NOTE: 变量 meanA 未初始化。
NOTE: 变量 stda 未初始化。
NOTE: 变量 meanB 未初始化。
NOTE: 变量 stdB 未初始化。
NOTE: 变量 mediana 未初始化。
NOTE: 变量 q1a 未初始化。
NOTE: 变量 q3a 未初始化。
NOTE: 变量 medianb 未初始化。
NOTE: 变量 q1b 未初始化。
NOTE: 变量 q3b 未初始化。
NOTE: 变量 mina 未初始化。
NOTE: 变量 maxa 未初始化。
NOTE: 变量 minb 未初始化。
NOTE: 变量 maxb 未初始化。
NOTE: 已有 5 行写入到文件 PRINT。


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-12-23 11:41:38
要学会看日志,分析原因哦!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-12-23 17:15:34
谢谢你啊
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群