如何停止 "fielref is still in use" 的错误
How to stop the error of "fielref is still in use"
我有这个网络抓取代码,它从网站源代码中获取某些信息。它运行一个宏,然后再调用 2 个宏。第一次访问这些宏时,会发生错误。 "At least one file associated with filref is still in use"
下面是它运行的示例代码。让我知道是否需要更清楚的内容。
%macro webcrawl(search_url);
%let url3 = &search_url;
filename _next3 url "&url3";
data search_website;
infile _next3 length = len lrecl = 32767;
input text $varying32767. len;
if index(text,'<header>') or index(text, '<p>');
run;
proc sql;
create table table1 as
select distinct var1
from table;
quit;
/* Calls the macro from above to "crawl" the website
%do i=1 %to &show_count;
%showpage1( &i, &&var_&i, http://www.website.com );
%showpage2( &i, &&var_&i, http://www.website.com/2 );
%end;
下面是showpage1的代码,showpage2也是一样的,只是网站不同而已。
%macro showpage1( index, show, url );
%let url1 = &url;
filename _next url "&url";
data search_website;
infile _next length = len lrecl = 32767;
input text $varying32767. len;
if index(text, '<span>') or index(text, '</span>');
retain i;
if index(text, '<h2 class="title"') then i+1;
run;
data counting;
set search_website;
by i;
if first.i then count = 0;
count+1;
run;
proc transpose data=counting out=search_one_line prefix=info;
by i;
id count;
var text;
run;
data info1_&i (keep=var1 var 2 var3);
set dataset1;
run;
options missing=0;
%mend showpage1;
您可能需要弄清楚为什么 SAS 认为该文件仍在使用中,但是有几种方法可以修改您的程序来解决问题。
您可以在每次运行宏时使用不同的文件引用。您可以为此使用 SYSINDEX
自动变量,因为它计算宏调用的次数。
filename _n&sysindex url "&url";
...
infile _n&sysindex length = len lrecl = 32767;
还要确保在数据步骤完成后清除 fileref。
...
run;
filename _n&sysindex clear ;
我有这个网络抓取代码,它从网站源代码中获取某些信息。它运行一个宏,然后再调用 2 个宏。第一次访问这些宏时,会发生错误。 "At least one file associated with filref is still in use" 下面是它运行的示例代码。让我知道是否需要更清楚的内容。
%macro webcrawl(search_url);
%let url3 = &search_url;
filename _next3 url "&url3";
data search_website;
infile _next3 length = len lrecl = 32767;
input text $varying32767. len;
if index(text,'<header>') or index(text, '<p>');
run;
proc sql;
create table table1 as
select distinct var1
from table;
quit;
/* Calls the macro from above to "crawl" the website
%do i=1 %to &show_count;
%showpage1( &i, &&var_&i, http://www.website.com );
%showpage2( &i, &&var_&i, http://www.website.com/2 );
%end;
下面是showpage1的代码,showpage2也是一样的,只是网站不同而已。
%macro showpage1( index, show, url );
%let url1 = &url;
filename _next url "&url";
data search_website;
infile _next length = len lrecl = 32767;
input text $varying32767. len;
if index(text, '<span>') or index(text, '</span>');
retain i;
if index(text, '<h2 class="title"') then i+1;
run;
data counting;
set search_website;
by i;
if first.i then count = 0;
count+1;
run;
proc transpose data=counting out=search_one_line prefix=info;
by i;
id count;
var text;
run;
data info1_&i (keep=var1 var 2 var3);
set dataset1;
run;
options missing=0;
%mend showpage1;
您可能需要弄清楚为什么 SAS 认为该文件仍在使用中,但是有几种方法可以修改您的程序来解决问题。
您可以在每次运行宏时使用不同的文件引用。您可以为此使用 SYSINDEX
自动变量,因为它计算宏调用的次数。
filename _n&sysindex url "&url";
...
infile _n&sysindex length = len lrecl = 32767;
还要确保在数据步骤完成后清除 fileref。
...
run;
filename _n&sysindex clear ;