由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Statistics版 - 问一个SAS macro的问题
相关主题
SAS里用macro的文件名里数字的问题sas 代码问题
[合集] SAS 问题:如何在使用macro的时候保护data。SAS MACRO里的循环不work是怎么回事
[合集] 请教一个sas问题need sas debug help!! Please...
请教SAS ADV 50 中的一道简单macro题目请教一道SAS MACRO编程的问题。怎么都不明白。谢谢
请教一个SAS题目发包子求大牛解SAS问题,急
求助:一个SAS的小问题Stupid SAS programming style is driving me crazy....
batch?Need advice on SAS macro debugging
问你们个 sas macro 的问题为什么这两个Macro给出结果不一样哪?
相关话题的讨论汇总
话题: macro话题: sysfunc话题: attrn话题: indata话题: attvalue
进入Statistics版参与讨论
1 (共1页)
l*********t
发帖数: 18
1
我写了一个很短的macro, 用来提取sas dataset的attribute.
%macro getattrn(indata=, attrn=);
%if %sysfunc(exist(&indata)) %then %do;
%* open data set;
%let did=%sysfunc(open(&indata));
%* Get attribute;
%let attvalue=%sysfunc(attrn(&did, &attrn));
%* Close data set;
%sysfunc(close(&did));
%end;
%else %let attvalue=-999;
&attvalue
%mend getattrn;
然后call的时候就把值赋给一个marco variable, 比如
%let MV=%getattrn(indata=mydata, attrn=nobs)
按道理这个macro应该返回mydata里面的observation个数. 但是我查MV的值竟然是:
0; 396
mydata的确有396个observation, 但是我不知道前面的0;是从哪儿产生的.
谁能帮我看一下吗?
谢谢先
A*******s
发帖数: 3942
2
我一时半刻看不出来这个0怎么来
但是你是不能这么用macro的
macro不是函数,没有返回值,只是文本替换而已。

【在 l*********t 的大作中提到】
: 我写了一个很短的macro, 用来提取sas dataset的attribute.
: %macro getattrn(indata=, attrn=);
: %if %sysfunc(exist(&indata)) %then %do;
: %* open data set;
: %let did=%sysfunc(open(&indata));
: %* Get attribute;
: %let attvalue=%sysfunc(attrn(&did, &attrn));
: %* Close data set;
: %sysfunc(close(&did));
: %end;

k*******a
发帖数: 772
3
我觉得是 %sysfunc(close(&did)); 这一句引起的
因为他返回0 ,如果改成 %let close=%sysfunc(close(&did)); 应该就好了
A*******s
发帖数: 3942
4
你说的应该是对的。
不过编程还是尽量少选高难度模式吧,呵呵

【在 k*******a 的大作中提到】
: 我觉得是 %sysfunc(close(&did)); 这一句引起的
: 因为他返回0 ,如果改成 %let close=%sysfunc(close(&did)); 应该就好了

l*********t
发帖数: 18
5
非常感谢! 你好厉害, 一下就看出来了!

【在 k*******a 的大作中提到】
: 我觉得是 %sysfunc(close(&did)); 这一句引起的
: 因为他返回0 ,如果改成 %let close=%sysfunc(close(&did)); 应该就好了

l*********t
发帖数: 18
6
sas是可以这样返回值的, 不过我承认的确很不方便.
如果不这样返回的话, 就只能用global variable. 我个人不喜欢用太多global macro
variable. 用多了程序结构很乱.
其实sas的macro做得就跟一坨屎一样, 我经常想写信骂他们.

【在 A*******s 的大作中提到】
: 你说的应该是对的。
: 不过编程还是尽量少选高难度模式吧,呵呵

A*******s
发帖数: 3942
7
很多语言的macro都是一样的吧,
macro肯定没有function这么方便啊
而且你这个最后还是赋值给一个global macro variable了
你把这个赋值语句放进你的macro里面再设为global也是一样的吧。

macro

【在 l*********t 的大作中提到】
: sas是可以这样返回值的, 不过我承认的确很不方便.
: 如果不这样返回的话, 就只能用global variable. 我个人不喜欢用太多global macro
: variable. 用多了程序结构很乱.
: 其实sas的macro做得就跟一坨屎一样, 我经常想写信骂他们.

l*********t
发帖数: 18
8
我赋值给的是local variable啊

【在 A*******s 的大作中提到】
: 很多语言的macro都是一样的吧,
: macro肯定没有function这么方便啊
: 而且你这个最后还是赋值给一个global macro variable了
: 你把这个赋值语句放进你的macro里面再设为global也是一样的吧。
:
: macro

1 (共1页)
进入Statistics版参与讨论
相关主题
为什么这两个Macro给出结果不一样哪?请教一个SAS题目
求助关于sas macro 中的if- then语句求助:一个SAS的小问题
why this error in %if statementbatch?
SAS Technical Interview Questions问你们个 sas macro 的问题
SAS里用macro的文件名里数字的问题sas 代码问题
[合集] SAS 问题:如何在使用macro的时候保护data。SAS MACRO里的循环不work是怎么回事
[合集] 请教一个sas问题need sas debug help!! Please...
请教SAS ADV 50 中的一道简单macro题目请教一道SAS MACRO编程的问题。怎么都不明白。谢谢
相关话题的讨论汇总
话题: macro话题: sysfunc话题: attrn话题: indata话题: attvalue