我有以下代码,它检查文件名URL语句是否已正确传递它的内容和infile语句 . 如果不是宏应该迭代十次尝试 Build URL连接然后放弃:
%macro test_exst(iter);
/*filename loader url "http://www.sdhsdisdhsidhsidh.com";*/
/*filename loader url "http://www.bbc.co.uk/sport";*/
filename loader url "http://finance.yahoo.com/d/quotes.csv?s=GOOG&f=na5";
/* data step based on filename url above goes here, each pass will give 500 metrics x 1 symbol dataset*/
%put create dataset from csv submission;
%Let ITER = %Eval(&ITER + 1);
%let obscount = 1;
data mytest;
infile loader length=len MISSOVER /*delimiter = ','*/;
input record $varying30. len;
format record $30.;
informat record $30.;
call symputx("obscount2",_n_);
run;
%put obscount = &obscount;
%put obscount2 = &obscount2;
%if &obscount2= . %then %let obscount2 = &obscount;
%put obscount2 = &obscount2;
%if &obscount2=1 and %eval(&iter. < 10) %then %do;
%put Iteration &iter. failed, trying again;
%test_exst(&iter.);
%end;
%mend test_exst;
%test_exst(0);
只要正确创建数据集(即代码不会不恰当地迭代),这样就可以正常工作,但是当文件名URL连接不起作用时,宏变量&obscount2 . 未正确解析,我收到一条错误消息,指出字符串已被错误地传递给%if或%eval语句 .
我理解为什么会出现这个错误,但我似乎无法获得该行的语法正确:
%if &obscount2= . %then %let obscount2 = &obscount;
基本上我在这里试图说,如果'&Obscount2'尚未解决,那么将它改为'&obscount'代替,这已被预先定义为1.然后在该行:
%if&obscount2 = 1和%eval(&iter . <10)%然后%do;
我知道我的数据集只会有200或零观察,因为我的URL将在此代码的最终版本中编码的方式的性质 . 如果&Obscount2 = 1,那么它只能是因为它最初没有得到解决而被指向它 . 然后代码将循环,直到 Build 文件名URL连接 .
关于如何完成代码的任何想法?
谢谢
2 回答
你可以创建你的数据集mytest,然后根据这个链接使用attrn函数检查它有多少观察:
http://support.sas.com/kb/25/078.html
这最终有效: