我对以下SAS代码有两个问题:
%let crsnum=3;
data revenue;
set sasuser.all end=final;
where course_number=&crsnum;
total+1;
if paid=’Y’ then paidup+1;
if final then do;
call symput(’numpaid’,paidup);
call symput(’numstu’,total);
call symput(’crsname’,course_title);
end;
run;
proc print data=revenue noobs;
var student_name student_company paid;
title "Fee Status for &crsname (#&crsnum)";
footnote "Note: &numpaid Paid out of &numstu Students";
run;
第一个问题,在第5行,它有
if paid=’Y’ then paidup+1;
“payup”应该是一个变量。 在我看来,SAS将“payup”的默认初始值设置为0.这是真的吗?
第二个问题,在
的代码段中title "Fee Status for &crsname (#&crsnum)";
#& crsnum如何运作?或者#here的功能是什么?
答案 0 :(得分:1)
第一个问题:是的,这就是SAS所做的事情 - 它已经将变量初始化为0,并且在数据集循环中“保留”变量的值。 (除非变量paidup已存在于源数据中,在您的情况下为sasuser.all)
第二个问题:在您发布的代码中,#
没有什么特别之处:它会在&crsnum
的已解析值之前显示为文字标题。因此,如果& crsname为 Blah 且& crsnum为 3 ,则标题将为
Blah的费用状况(#3)
然而,当by
群组正在播放时,#可以影响标题,当以特定方式包含在标题中时 - 请参阅文档here,标题为'插入BY-Group信息到标题'。