关于SAS变量的默认初始化值的问题

时间:2011-01-26 22:27:45

标签: sas

我对以下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的功能是什么?

1 个答案:

答案 0 :(得分:1)

第一个问题:是的,这就是SAS所做的事情 - 它已经将变量初始化为0,并且在数据集循环中“保留”变量的值。 (除非变量paidup已存在于源数据中,在您的情况下为sasuser.all)

第二个问题:在您发布的代码中,#没有什么特别之处:它会在&crsnum的已解析值之前显示为文字标题。因此,如果& crsname为 Blah 且& crsnum为 3 ,则标题将为

  

Blah的费用状况(#3)

然而,当by群组正在播放时,#可以影响标题,当以特定方式包含在标题中时 - 请参阅文档here,标题为'插入BY-Group信息到标题'。