楼主: zljwanzi25
2757 11

[问答] 这段宏程序运行不了,请教高手指教 [推广有奖]

  • 0关注
  • 1粉丝

博士生

52%

还不是VIP/贵宾

-

威望
0
论坛币
1775 个
通用积分
0
学术水平
0 点
热心指数
2 点
信用等级
0 点
经验
763 点
帖子
180
精华
0
在线时间
327 小时
注册时间
2006-11-22
最后登录
2021-12-6

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

这段宏程序运行不了,也没有报错,不知道是哪里的问题,请教高手指教!



%macro nvardescrip(data =trans , out = like);

proc contents data=&data out=a0 noprint;

run;  

proc sql;

select NAME into : nvarsseperated by '  '  from a0 where TYPE = 1;

quit;

%let i = 1;

%do %until(%scan(&nvars, &i, '  ') = );

%let varname = %scan(&nvars, &i, '  ');

%end;

proc univariate data = &data noprint;

var&varname;

output out = a1 nmiss = nmiss mean = mean std = std min = min Q1 = Q1 median = median Q3 = Q3 max = max;

run;

data a1;

retain name nmiss mean std min Q! median Q3 max;

set a1;

length name $15.;

name = "&varname";

label name = "变量名" nmiss = "缺失观察数" mean = "均值" std = "标准偏差" min = "最小值" Q1 = "下四分位"

median = "中位数" Q3 = "上四分位数" max = "最大值";

run;

%if &i = 1 %then %do;

data&out; set a1; run;

%end;

%else %do;

data &out; set &out; run;


%mend;


二维码

扫码加我 拉你入群

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

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

关键词:请教高手 宏程序 Univariate contents proc sql 程序

沙发
liudeng2005 发表于 2015-2-9 14:47:44 |只看作者 |坛友微信交流群
%scan(&nvars, &i, %str( ));

使用道具

藤椅
zljwanzi25 发表于 2015-2-9 15:06:40 |只看作者 |坛友微信交流群
liudeng2005 发表于 2015-2-9 14:47
%scan(&nvars, &i, %str( ));
还是不行!

使用道具

板凳
liudeng2005 发表于 2015-2-9 15:39:58 |只看作者 |坛友微信交流群
%macro nvardescrip(data =trans , out = like);

proc contents data=&data out=a0 noprint;

run;  


proc sql;

select distinct NAME into : var1-:var99999 from a0 where TYPE = 1;

quit;

%let tn=&sqlobs;
%do  i = 1 to &tn;  


proc univariate data = &data noprint;

var&varname;

output out = a1 nmiss = nmiss mean = mean std = std min = min Q1 = Q1 median = median Q3 = Q3 max = max;

run;


data a1;

retain name nmiss mean std min Q! median Q3 max;

set a1;

length name $15.;

name = "&&var&i";

label name = "变量名" nmiss = "缺失观察数" mean = "均值" std = "标准偏差" min = "最小值" Q1 = "下四分位"

median = "中位数" Q3 = "上四分位数" max = "最大值";

run;


%if &i = 1 %then %do;

data&out; set a1; run;

%end;

%else %do;

data &out; set &out a1; run;

%end;
%end;




%mend;

使用道具

报纸
zljwanzi25 发表于 2015-2-9 16:53:59 |只看作者 |坛友微信交流群
liudeng2005 发表于 2015-2-9 15:39
%macro nvardescrip(data =trans , out = like);

proc contents data=&data out=a0 noprint;
还是不行,不报错,也不运行

使用道具

地板
liudeng2005 发表于 2015-2-9 16:55:55 |只看作者 |坛友微信交流群
。。。


%nvardescrip()

使用道具

7
pobel 在职认证  发表于 2015-2-9 17:17:11 |只看作者 |坛友微信交流群
1. 把 第一个%end; 放到 %mend;之前, 并且需要再增加一个%end; ;
2. 在程序最后加 %nvardescrip()

使用道具

8
tangliang0905 发表于 2015-2-10 02:18:37 |只看作者 |坛友微信交流群
options mprint mlogic;

%macro nvardescrip(data =sashelp.class , out = like);

proc contents data=&data out=a0 noprint;
run;
proc datasets library=work;
delete &out;
run;

proc sql;
select NAME into : nvars separated by ' '  from a0 where TYPE = 1;
quit;
%let i = 1;
%do %until(%scan(&nvars, &i, %str(' ')) = );
%let varname = %scan(&nvars, &i, %str(' '));
%let i = %eval(&i+1);
proc univariate data = &data noprint;
var &varname;
output out = a1 nmiss = nmiss mean = mean std = std min = min Q1 = Q1 median = median Q3 = Q3 max = max;
run;
data a1;
retain name nmiss mean std min Q1 median Q3 max;
set a1;
length name $15.;
name = "&varname";
run;

proc append base=&out data=a1;
run;

%end;
%mend;

%nvardescrip();

使用道具

9
wpfwxn 发表于 2015-2-10 09:00:09 |只看作者 |坛友微信交流群
你写宏太任性了,只可惜功力还没够呀,我帮你改好了。

%macro nvardescrip(data =trans , out = like);
proc contents data=&data out=a0 noprint;
run;  
proc sql noprint;
select NAME into : nvars separated by '  '  from a0 where TYPE = 1;
quit;
%let i = 1;
%do %until(%scan(&nvars, &i, '  ') = );
%let varname = %scan(&nvars, &i, '  ');

proc univariate data = &data noprint;
var &varname;
output out = a1 nmiss = nmiss mean = mean std = std min = min Q1 = Q1 median = median Q3 = Q3 max = max;
run;

data a1;
retain name nmiss mean std min Q1 median Q3 max;
set a1;
length name $15;
name = "&varname";
label name = "变量名" nmiss = "缺失观察数" mean = "均值" std = "标准偏差" min = "最小值" Q1 = "下四分位"
median = "中位数" Q3 = "上四分位数" max = "最大值";
run;

%if &i = 1 %then %do;
data &out; set a1; run;
%end;
%else %do;
data &out; set &out a1; run;
%end;

%let i = %eval(&i. + 1);

%end;

%mend;

%nvardescrip(data =sashelp.class , out = like);

使用道具

10
zljwanzi25 发表于 2015-2-10 10:05:55 |只看作者 |坛友微信交流群
wpfwxn 发表于 2015-2-10 09:00
你写宏太任性了,只可惜功力还没够呀,我帮你改好了。

%macro nvardescrip(data =trans , out = like);
...
谢谢高手指点,终于搞定了!另外想弱弱问一句,为什么下面要加%nvardescrip(data=,out=); 这个语句。

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-26 23:03