由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Statistics版 - 请教一个SAS Macro的问题
相关主题
SAS macro questionsas 代码问题
请教 SAS macro function 的问题请教一个SAS 数据分配问题
唉,还得求教前辈SAS help needed
sas macro 问题SAS help : how to macro ods
【包子】求问个简单sas macro问题请问SAS ADV 130中74 和80题
how to use first.var in sas macro?问个SAS题目,
[合集] SAS问题求助-如何把普通变量的值传递给宏变量How to set initial dataset to zero in a SAS macro?
sas macro, proc sql 问题Help Please! SAS Advanced 考证题求助
相关话题的讨论汇总
话题: macro话题: jump话题: test话题: min话题: max
进入Statistics版参与讨论
1 (共1页)
f*****u
发帖数: 129
1
想做这么一个简单的loop,但是总是出错,请大家指点一下问题在哪里,谢谢!
%macro test(min,max,jump);
%do x = &min %to &max %by &jump;
print x;
%end;
%mend;
%test(1,3,0.5);
ERROR: A character operand was found in the %EVAL function or %IF condition
where a numeric operand is required. The condition was: &jump
ERROR: The %BY value of the %DO X loop is invalid.
ERROR: The macro TEST will stop executing.
g********0
发帖数: 90
2
%macro test(min,max,jump);
data bb;
do x = &min to &max by &jump;
output;
end;
run;
%mend;
%test(1,3,0.5);

condition

【在 f*****u 的大作中提到】
: 想做这么一个简单的loop,但是总是出错,请大家指点一下问题在哪里,谢谢!
: %macro test(min,max,jump);
: %do x = &min %to &max %by &jump;
: print x;
: %end;
: %mend;
: %test(1,3,0.5);
: ERROR: A character operand was found in the %EVAL function or %IF condition
: where a numeric operand is required. The condition was: &jump
: ERROR: The %BY value of the %DO X loop is invalid.

f*****u
发帖数: 129
3
谢谢,其实我是想在每个loop用x的值运行几个proc,
请问那样的话,我的code需要怎么改呢?再次感谢!

【在 g********0 的大作中提到】
: %macro test(min,max,jump);
: data bb;
: do x = &min to &max by &jump;
: output;
: end;
: run;
: %mend;
: %test(1,3,0.5);
:
: condition

f*****a
发帖数: 693
4
%macro test(min,max,jump);
%do x = &min %to &max %by &jump;
%let y=%sysevalf(&x-0.5);
%put &x &y;
%end;
%mend;
%test(1,3,1);
好像是sas macro 里的参数按字符处理,然后用%eval()来估值,但是%eval()只能估整
数值,所以你的0.5作为参数不行。但是我想在&min, &max, &jump前用上这个%
sysevalf()函数用来估值应该可以,但不知道为什么不行。我只好改成上面的方法,就
是参数里都是整数,在macro里再计算所需的指。还请高人指点能否有直接用参数
的方法。
A*******s
发帖数: 3942
5
sas macro里的loop是不能用非整数的,很麻烦
得用别的方法迂回一下才行
%let x=&min;
%do %while (%sysevalf(&x <= &max));
%let x=%sysevalf(&x+&jump);
%put &x;
%end;

【在 f*****a 的大作中提到】
: %macro test(min,max,jump);
: %do x = &min %to &max %by &jump;
: %let y=%sysevalf(&x-0.5);
: %put &x &y;
: %end;
: %mend;
: %test(1,3,1);
: 好像是sas macro 里的参数按字符处理,然后用%eval()来估值,但是%eval()只能估整
: 数值,所以你的0.5作为参数不行。但是我想在&min, &max, &jump前用上这个%
: sysevalf()函数用来估值应该可以,但不知道为什么不行。我只好改成上面的方法,就

f*****a
发帖数: 693
6
第一次回复错了,应该改成:
%macro test(min,max,jump);
%do x = &min %to &max %by &jump;
%let y=%sysevalf(&x-0.5*(&i-1));
%put &x &y;
%end;
%mend;
%test(1,3,1);

【在 f*****a 的大作中提到】
: %macro test(min,max,jump);
: %do x = &min %to &max %by &jump;
: %let y=%sysevalf(&x-0.5);
: %put &x &y;
: %end;
: %mend;
: %test(1,3,1);
: 好像是sas macro 里的参数按字符处理,然后用%eval()来估值,但是%eval()只能估整
: 数值,所以你的0.5作为参数不行。但是我想在&min, &max, &jump前用上这个%
: sysevalf()函数用来估值应该可以,但不知道为什么不行。我只好改成上面的方法,就

f*****a
发帖数: 693
7
这个%do %while的思路更好,谢谢。

【在 A*******s 的大作中提到】
: sas macro里的loop是不能用非整数的,很麻烦
: 得用别的方法迂回一下才行
: %let x=&min;
: %do %while (%sysevalf(&x <= &max));
: %let x=%sysevalf(&x+&jump);
: %put &x;
: %end;

f*****u
发帖数: 129
8
多谢!

【在 A*******s 的大作中提到】
: sas macro里的loop是不能用非整数的,很麻烦
: 得用别的方法迂回一下才行
: %let x=&min;
: %do %while (%sysevalf(&x <= &max));
: %let x=%sysevalf(&x+&jump);
: %put &x;
: %end;

f*****u
发帖数: 129
9
多谢!

【在 f*****a 的大作中提到】
: 第一次回复错了,应该改成:
: %macro test(min,max,jump);
: %do x = &min %to &max %by &jump;
: %let y=%sysevalf(&x-0.5*(&i-1));
: %put &x &y;
: %end;
: %mend;
: %test(1,3,1);

1 (共1页)
进入Statistics版参与讨论
相关主题
Help Please! SAS Advanced 考证题求助【包子】求问个简单sas macro问题
Help: an I/O ERROR occuredhow to use first.var in sas macro?
请教SAS adv 题库一道macro题[合集] SAS问题求助-如何把普通变量的值传递给宏变量
在线等:急问大牛帮我看看SAS macro里的问题sas macro, proc sql 问题
SAS macro questionsas 代码问题
请教 SAS macro function 的问题请教一个SAS 数据分配问题
唉,还得求教前辈SAS help needed
sas macro 问题SAS help : how to macro ods
相关话题的讨论汇总
话题: macro话题: jump话题: test话题: min话题: max