全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1504 1
2010-09-16
data a;
input x y;
cards;
9.56 10.15
4.57 8.98
;
run;
我想用下面这个宏来实现
data b;
set a;
v1=scan(x,1);
v2=scan(x,2);
p1=scan(y,1);
p2=scan(y,2);
run;
的结果。但是我用如下的宏

%macro tt();
%let dsid=%sysfunc(open(a));
%if &dsid gt 0 %then %do;
%let nobs=%sysfunc(attrn(&dsid,nobs));
%do i=1 %to &nobs;
%let rc=%sysfunc(fetchobs(&dsid,&i));
%let varnume=%sysfunc(varnum(&dsid,x));
%let variable=%sysfunc(getvarn(&dsid,&varnume));
%let varnume1=%sysfunc(varnum(&dsid,y));
%let variable1=%sysfunc(getvarn(&dsid,&varnume1));
data b;
set a;
v1=scan(&variable,1);
v2=scan(&variable,2);
p1=scan(&variable1,1);
p2=scan(&variable1,2);
run;
%end;
%let dsid=%sysfunc(close(&dsid));
%end;
%mend tt;
%tt;
但是我实现的结果却是每列值都是最后一行观测值计算得到的值,请问是怎么回事,应该怎么修改才行?
二维码

扫码加我 拉你入群

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

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

全部回复
2010-9-16 21:22:31
1 没完全明白为什么要这样写,练习使用fetchobs,getvarn这些函数?用到的方法和原来一模一样啊
2 data步执行了&nobs次,故保留最后次产生的b,根据fetchobs的存在,为最后一条
3 那个rename没有报错?
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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