楼主: gaotao0727
6278 3

[问答] 关于宏函数sysfunc的几个问题 [推广有奖]

  • 1关注
  • 10粉丝

副教授

79%

还不是VIP/贵宾

-

威望
0
论坛币
540 个
通用积分
11.2790
学术水平
18 点
热心指数
18 点
信用等级
12 点
经验
27715 点
帖子
873
精华
0
在线时间
855 小时
注册时间
2011-8-8
最后登录
2023-3-1

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我先大致说一下我的问题吧
这只是一个数据集:
data test;
input region $ state $ month monyy5. headcnt expenses revenue;
format month monyy5.;
cards;
EASTERN VA FEB78 10 7800 15500
SOUTHERN FL MAR78 9 9800 13500
SOUTHERN GA JAN78 5 2000 8000
NORTHERN MA MAR78 3 1500 1000
SOUTHERN FL FEB78 10 8500 11000
NORTHERN NY MAR78 5 6000 5000
EASTERN VA MAR78 11 8200 16600
PLAINS NM MAR78 2 1350 500
SOUTHERN FL JAN78 10 8000 10000
NORTHERN NY FEB78 4 3000 4000
SOUTHERN GA FEB78 7 1200 6000
;
run;
接下来进行如下处理:
data ttest;
%let dsid=%sysfunc(open(test));
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,region));
  %let variable=%sysfunc(getvarc(&dsid,&varnume));
end;
put "&dsid";
put "&nobs";
put "&rc";
put "&varnume";
put "&variable";
end;
run;
当运行第二段程序时,语句%let rc=%sysfunc(fetchobs(&dsid,i));会提示有错误?日志中说 i 变量不是number,哪位大侠帮我解释一下为什么会出现这种错误?最好也帮我解释一下put "&dsid";的输出结果,多次运行其输出值会逐步加1,为什么?非常感谢~~~


二维码

扫码加我 拉你入群

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

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

关键词:sysfunc SFU Fun Sys UNC revenue

衣带渐宽终不悔,为伊消得人憔悴~~
沙发
hopewell 发表于 2011-12-13 09:11:07 |只看作者 |坛友微信交流群
  1. %macro test;
  2.     data ttest;
  3.         %let dsid=%sysfunc(open(test));
  4.         %if &dsid gt 0 %then %do;
  5.             %let nobs=%sysfunc(attrn(&dsid,nobs));
  6.             %do i=1 %to &nobs;
  7.                 %let rc=%sysfunc(fetchobs(&dsid,&i));
  8.                 %let varnume=%sysfunc(varnum(&dsid,region));
  9.                 %let variable=%sysfunc(getvarc(&dsid,&varnume));
  10.                 %put "&dsid";
  11.                 %put "&nobs";
  12.                 %put "&rc";
  13.                 %put "&varnume";
  14.                 %put "&variable";
  15.                 %put *****************;
  16.             %end;
  17.             %let rc=%sysfunc(close(&dsid));
  18.         %end;
  19.     run;
  20. %mend test;
  21. %test
复制代码
观钓颇逾垂钓趣 种花何问看花谁

使用道具

藤椅
gaotao0727 发表于 2011-12-13 09:47:25 |只看作者 |坛友微信交流群
hopewell 发表于 2011-12-13 09:11
你好,非常感谢你帮我修正~你的意思是那段代码必须要放在一个宏中是吗?像我那样写不可以吗?
衣带渐宽终不悔,为伊消得人憔悴~~

使用道具

板凳
shenliang_111 发表于 2011-12-13 14:39:47 |只看作者 |坛友微信交流群
等等...

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-1 20:01