楼主: lucyber
1526 1

SAS中程序执行的问题 [推广有奖]

  • 0关注
  • 1粉丝

已卖:244份资源

博士生

8%

还不是VIP/贵宾

-

威望
0
论坛币
1668 个
通用积分
0.0600
学术水平
1 点
热心指数
2 点
信用等级
1 点
经验
465 点
帖子
55
精华
0
在线时间
387 小时
注册时间
2010-4-25
最后登录
2016-6-3

楼主
lucyber 发表于 2010-9-16 20:58:09 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
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;
但是我实现的结果却是每列值都是最后一行观测值计算得到的值,请问是怎么回事,应该怎么修改才行?
二维码

扫码加我 拉你入群

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

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

关键词:程序执行 Variable sysfunc cards Input 程序 SAS

沙发
soporaeternus 发表于 2010-9-16 21:22:31
1 没完全明白为什么要这样写,练习使用fetchobs,getvarn这些函数?用到的方法和原来一模一样啊
2 data步执行了&nobs次,故保留最后次产生的b,根据fetchobs的存在,为最后一条
3 那个rename没有报错?
Let them be hard, but never unjust

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-29 12:03