|
|
沙发

楼主 |
发表于 2010-4-29 12:42:18
|
只看该作者
Re: 求好心人帮我一句句解释下程序
[code:2mbh5gjj]%macro kk;
/* 用SQL创建宏变量edit_p */
/* yrl.mt0001表,条件ed_opition为Y、bs为YL的edition的值 */
proc sql;
select edition into :edit_p
from yrl.mt0001
where ED_OPITION="Y" and BS="YL";
quit;
/* 根据宏变量edit_p的值取yrl.surl0003的子集 */
/* temp1保留1个变量edition,长度为9,前6位为字符,后2位为数字 */
data tmp1(keep=edition);
set yrl.surl0003;
/* 取edition的前6位与edit_p的值比较 */
where substr(edition,1,6)="&edit_p";
run;
/* 升序排tmp1,删除重复 */
proc sort data=tmp1 nodupkey;
by edition;
run;
/* 用SQL创建数据集tmp2 */
/* 汇总变量nu存储edition的个数,并拼和到原始数据的各行 */
/* 如tmp1为空,则nu为0 */
proc sql;
create table tmp2 as
select *,count(*) as nu
from tmp1;
quit;
/* 根据tmp2中edition和nu的值创建宏变量new_edition */
data _null_;
set tmp2;
/* 当nu不为0时 */
if nu ne 0 then
/* 当edition的后2位>9时,new_edition为edition的值加1 */
if input(substr(edition,7,2),2.)+1 >9 then
call symput('new_edition',compress(substr(edition,1,6)||put(input(substr(edition,7,2),2.)+1,2.)));
/* 当edition的后2位为1-9时,new_edition为edition的值加1(补0) */
else
call symput('new_edition',compress(substr(edition,1,6)||"0"||put(input(substr(edition,7,2),2.)+1,2.)));
/* 当nu=0时,为宏变量edit_p的值拼上01 */
else call symput('new_edition',compress("&edit_p"||"01"));
run;
/* 创建宏变量edit52,值是宏变量edit_p的值第5和第6个字符 */
data _null_;
call symput('edit52',compress(substr("&edit_p",5,2)));
run;
/* put宏变量edit52的值 */
%put &edit52;
/* 根据宏变量edit52的值,创建宏变量t,t2 */
%if "&edit52" ne "Q0" %then
%do; /* 不等于Q0 */
%let T=OK;
%let T2=&edit_p;
%end;
%else
%do; /* 等于Q0 */
%let T=ON;
%let T2=季度版本不存在;
%end;
/* ○秘密 ○机密 ●绝密 */
/* 警告:已拒绝未知用户的非法访问,核心代码已自动销毁! */
/*............... */
put '<td height=30 align="center" width="400" colspan="4" >';
put '<p align="center"> <b><font class="HighLight">原料季度预算数据生成</font></b></p>';
put '</td>';
put '</tr></table>';
put '<table border="1" width="400" height="30" bordercolor="#9DBDFF" style="border-collapse: collapse" cellpadding="0" cellspacing="0">';
put '<tr>';
put '<td align="right"><font class="English">版本:</td>';
put "<td align='left'><font class='English'>&T2</td>";
put '<td align="right"><font class="English">版本序号:</td>';
put '<td align="left"><select name="EDITION_NUM">';
put "<option value=&new_edition>新序号</option>";
run;
/* 打开tmp1表 */
%let id=%sysfunc(open(tmp1));
/* 用%do%while依次获取tmp1的每条观测 */
%do %while(%sysfunc(fetch(&id))=0);
/* 创建宏变量kk1,值为tmp1中edition的值 */
%let kk1=%sysfunc(getvarc(&id,1));
/* 输出kk1的值 */
data _null_;
file _webout;
put "<option value=&kk1>&kk1</option>";
run;
%end;[/code:2mbh5gjj] |
|