由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Statistics版 - 【包子】求问个简单sas macro问题
相关主题
A quick question about masking in macrosas 代码问题
请教一个SAS Macro的问题请教一个SAS问题:怎样平均地把obs从小到大分成几个Group?
sas macro 问题SAS Macro Function
问个SAS题目,[合集] 一个sas问题
请教 SAS macro function 的问题请帮忙看3道SAS题。
how to use first.var in sas macro?killtest Q78 79 80
%do questionsSAS help
SAS macro的一个小问题一道ADV 130 题目
相关话题的讨论汇总
话题: macro话题: eval话题: operand话题: a1话题: data
进入Statistics版参与讨论
1 (共1页)
S********a
发帖数: 359
1
一个dataset, 有一个变量x,是数量型的,比如取值11,20,35.。。。
我想求一个平均值赋给y,这个平均值是从a1到a&x的
%macro avg/parmbuff;
data temp1;
set temp;
%let x=%eval(x);
%if number<=7 %then %do;
y=mean(a1-a&x);
w=.;
%end;
run;
%mend;
ERROR: A character operand was found in the %EVAL function or %IF condition where a numeric operand is required. The condition was: daysleft
大包子答谢!!
k*******a
发帖数: 772
2
这个不要用macro,用array
S********a
发帖数: 359
3
能说具体点吗?谢谢

【在 k*******a 的大作中提到】
: 这个不要用macro,用array
k*******a
发帖数: 772
4
你贴一些数据上来看看
m********9
发帖数: 1985
5
不是那么简单因为X 是个变量。
%macro avg/parmbuff;
proc sql noprint;
select x into : x separated by " "
from temp
where number<=7;
quit;
data temp1;
set temp;
where number<=7;
%do _a = 1 %to %eval(%sysfunc(count(&x, %bquote( ))) + 1);
%let i= %scan(&x, &_a, %str( )));
y=mean(a1-a&i);
output;
%end;
run;
%mend;


S********a
发帖数: 359
6
三黄包先发了再看

【在 m********9 的大作中提到】
: 不是那么简单因为X 是个变量。
: %macro avg/parmbuff;
: proc sql noprint;
: select x into : x separated by " "
: from temp
: where number<=7;
: quit;
: data temp1;
: set temp;
: where number<=7;

k*******a
发帖数: 772
7
mean(a1-a&x)应该为 mean(of a1-a&x)
A****t
发帖数: 141
8
把data step variable的值赋给macro variable,要用symput不能用%let,因为在data
step编译之前,macro语句就已经被执行了,所以你的%eval(x)里面,x就只是一个
character x
把%let那一行改成call symput('x',trim(left(x))); 应该就可以了
g****8
发帖数: 2828
9
%let是不行的。
光用call symput还不行,因为你得到的是最后一行的那个值,每一步都是。
要每次值不一样,得每一步跟着换变量名。
call symput('x'||put(_N_,best.),trim(left(x)));
这样,就涉及到调用的时候也需要跟着换的问题。
想了想,没有什么好方法,可能搞个自增的macro var &i在date step里面然后再用&&
x&i调用。
个人觉得SAS这个只取最后一行值,挺脑残的,下个版本应该改进一下。

data

【在 A****t 的大作中提到】
: 把data step variable的值赋给macro variable,要用symput不能用%let,因为在data
: step编译之前,macro语句就已经被执行了,所以你的%eval(x)里面,x就只是一个
: character x
: 把%let那一行改成call symput('x',trim(left(x))); 应该就可以了

g****8
发帖数: 2828
10
我也要包子~~~
相关主题
how to use first.var in sas macro?sas 代码问题
%do questions请教一个SAS问题:怎样平均地把obs从小到大分成几个Group?
SAS macro的一个小问题SAS Macro Function
进入Statistics版参与讨论
m*********n
发帖数: 413
11
%if number<=7 %then %do;
。。。。
%end;
这个导致错误
ERROR: A character operand was found in the %EVAL function or %IF condition
where a numeric operand is required. The condition was: daysleft
先好好看看macro programming吧
m*********n
发帖数: 413
12
data step 是逐行扫描,不是永远取最后一行

&&

【在 g****8 的大作中提到】
: %let是不行的。
: 光用call symput还不行,因为你得到的是最后一行的那个值,每一步都是。
: 要每次值不一样,得每一步跟着换变量名。
: call symput('x'||put(_N_,best.),trim(left(x)));
: 这样,就涉及到调用的时候也需要跟着换的问题。
: 想了想,没有什么好方法,可能搞个自增的macro var &i在date step里面然后再用&&
: x&i调用。
: 个人觉得SAS这个只取最后一行值,挺脑残的,下个版本应该改进一下。
:
: data

S******3
发帖数: 66
13
这个真是七窍通了六窍。。。
楼上说了,自己好好学学MACRO吧。

【在 S********a 的大作中提到】
: 一个dataset, 有一个变量x,是数量型的,比如取值11,20,35.。。。
: 我想求一个平均值赋给y,这个平均值是从a1到a&x的
: %macro avg/parmbuff;
: data temp1;
: set temp;
: %let x=%eval(x);
: %if number<=7 %then %do;
: y=mean(a1-a&x);
: w=.;
: %end;

g****8
发帖数: 2828
14
我说的是call symput这一步。
你不加给变量加个_N_, 那data step每次都是用取到的最后一行的那个值。
你可以去试试,我说的对不对。
我又没有说整个data step。
不要想当然哟。

【在 m*********n 的大作中提到】
: data step 是逐行扫描,不是永远取最后一行
:
: &&

g****8
发帖数: 2828
15
不需要用macro就能解决你的问题,
如果我用的sample data 对的话。
data temp;
array a(*) a1-a7;
input x a1 a2 a3 a4 a5 a6 a7 number;
ss=0;
do i =1 to x;
ss=ss+a(i);
end;
if number <7 then
avg=ss/x;
else avg=0;
cards;
7 2 3 4 5 6 3 2 2
3 5 4 5 2 1 4 5 3
5 3 3 2 1 3 5 3 8
;
run;
S********a
发帖数: 359
16
谢谢楼上的回复,包子已经发了
想好好学学MACRO,能给推荐个书或是resource吗?
m*******r
发帖数: 7495
17
你也是学统计的啊

【在 S********a 的大作中提到】
: 一个dataset, 有一个变量x,是数量型的,比如取值11,20,35.。。。
: 我想求一个平均值赋给y,这个平均值是从a1到a&x的
: %macro avg/parmbuff;
: data temp1;
: set temp;
: %let x=%eval(x);
: %if number<=7 %then %do;
: y=mean(a1-a&x);
: w=.;
: %end;

1 (共1页)
进入Statistics版参与讨论
相关主题
一道ADV 130 题目请教 SAS macro function 的问题
请问SAS advanced macro global 和localhow to use first.var in sas macro?
请教一个macro的问题%do questions
SAS ADVANCED 一道题求助SAS macro的一个小问题
A quick question about masking in macrosas 代码问题
请教一个SAS Macro的问题请教一个SAS问题:怎样平均地把obs从小到大分成几个Group?
sas macro 问题SAS Macro Function
问个SAS题目,[合集] 一个sas问题
相关话题的讨论汇总
话题: macro话题: eval话题: operand话题: a1话题: data