楼主: fisheryou
2844 3

[原创博文] <SAS数据挖掘商业案例>中宏变量问题 [推广有奖]

  • 1关注
  • 2粉丝

已卖:103份资源

副教授

9%

还不是VIP/贵宾

-

威望
0
论坛币
7591 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
42160 点
帖子
217
精华
0
在线时间
1209 小时
注册时间
2010-5-5
最后登录
2021-8-12

楼主
fisheryou 发表于 2012-4-7 20:33:42 |AI写论文
30论坛币
%let dsid=%sysfunc(open(lg.origin_num_var));
        %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,name));
                %let variable=%sysfunc(getvarc(&dsid,&varnume));

求解释这段程度的意思

最佳答案

freerunning_sky 查看完整内容

/*打开数据集lg.origin_num_ var*/ %let dsid=%sysfunc(open(lg.origin_num_var)); /*打开数据集无误(&dsid>0表示无误)*/ %if &dsid gt 0 %then %do; /*取数据集lg.origin_num_var的行数*/ %let nobs=%sysfunc(attrn(&dsid,nobs)); /*循环从第一行开始读到最后一行*/ %do i=1 %to &nobs; /*打开第&i行*/ %let rc=%sysfunc(fetchobs(&ds ...
关键词:Variable sysfunc Origin nobs tvar

沙发
freerunning_sky 在职认证  发表于 2012-4-7 20:33:43
/*打开数据集lg.origin_num_ var*/
%let dsid=%sysfunc(open(lg.origin_num_var));
        /*打开数据集无误(&dsid>0表示无误)*/
        %if &dsid gt 0 %then %do;
        /*取数据集lg.origin_num_var的行数*/
        %let nobs=%sysfunc(attrn(&dsid,nobs));
        /*循环从第一行开始读到最后一行*/
        %do i=1 %to &nobs;
                /*打开第&i行*/
                %let rc=%sysfunc(fetchobs(&dsid,&i));
                /*返回变量name在数据集lg.origin_num_var的位置*/
                %let varnume=%sysfunc(varnum(&dsid,name));
               /*返回变量name的第&i行的值(如果name是字符型,则用getvarc,数值型用getvarn*/
                %let variable=%sysfunc(getvarc(&dsid,&varnume));

藤椅
fisheryou 发表于 2012-4-8 11:05:18
  1. %macro doo;
  2. %let dsid=%sysfunc(open(sashelp.class));
  3. %put &dsid;
  4.         %if &dsid > 0 %then %do;
  5.                 %let nobs=%sysfunc(attrn(&dsid,nobs));
  6.                 %do i=1 %to &nobs;
  7.                         %let rc=%sysfunc(fetchobs(&disd,&i));
  8.                         %let varnume=%sysfunc(varnum(&dsid,name));
  9.                         %let variable=%sysfunc(getvarc(&dsid,&varnume));
  10.                 %end;
  11.                 %put &variable;
  12.                 %end;
  13. %mend doo;
  14. %doo;
复制代码
帮看一下这段代码吧,log提示:

ERROR: %SYSFUNC 或 %QSYSFUNC 宏函数引用的函数 FETCHOBS 中的参数 1 不是数字。
ERROR: %SYSCALL、%SYSFUNC 或 %QSYSFUNC 参数列表中检测到无效参数。%SYSCALL 语句或 %SYSFUNC 以及 %QSYSFUNC 函数引用将终止执行。

板凳
chendonghui1987 发表于 2012-4-8 12:13:55
%let rc=%sysfunc(fetchobs(&disd,&i));
这一行的&disd它写错了,应该是&dsid

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-7 12:00