我有一个名为Proposal的表,其中有一个列名为value_cd。 此列包含一些复选框的值,这些复选框将在我的网络报告中进行检查。我想检查其相关值在此列中的所有复选框。
table:Proposal
value_cd
New_par
Rev_par
这是我的代码
data _null_;
put numberOfObservationes=;
set work.Proposal nobs=numberOfObservationes;
file _webout;
if value_cd eq "New_par" then put '<input type=checkbox disabled checked /> <label>New Parameter</label> <br /> <hr /> ';
else put '<input type=checkbox disabled /> <label>New Parameter</label> <br /> <hr /> ';
if value_cd eq "Rev_par" then put '<input type=checkbox disabled checked /> <label>Revised Parameter</label> <br /> <hr /> ';
else put '<input type=checkbox disabled /> <label>Revised Parameter</label> <br /> <hr /> ';
if value_cd eq "New_pro" then put '<input type=checkbox disabled checked /> <label>New Process</label> <br /> <hr /> ';
else put '<input type=checkbox disabled /> <label>New Process</label> <br /> <hr /> ';
run;
我想在报表中只打印一次复选框,应该根据我的表的列value_cd的值来检查或取消选中它,但是如果值不相等则if条件运行else语句并且代码是打印复选框,直到value_cd计数。
如何根据value_cd打印一次复选框。
我想要这个
checkbox checked New Parameter *if-statement;
checkbox checked Revised Parameter *if-statement;
checkbox New Process *else-statement;
上面的代码是打印输出
checkbox checked New Parameter *if-statement;
checkbox Revised Parameter *else-statement;
checkbox New Process *else-statement;
checkbox New Parameter *else-statement;
checkbox checked Revised Parameter *if-statement;
checkbox New Process *else-statement;
答案 0 :(得分:2)
行方向发生了什么,6个复选框:
row-1: logic-1-output logic-2-output logic-3-output
row-2: logic-1-output logic-2-output logic-3-output
想要什么,3个复选框:
row-1: track-logic-1-for-true track-logic-2-for-true track-logic-3-for-true
row-2: track-logic-1-for-true track-logic-2-for-true track-logic-3-for-true
last-row: output-based-on-tracked-logics
这是一种方法
跟踪在所有行上发生的value_cd状态,然后执行输出。
data _null_;
put numberOfObservationes=;
set work.Proposal nobs=numberOfObservationes end=last_row;
array boxes[3] _temporary_; * 1st slot is for New_par, 2nd for Rev_par, etc..;
* track for true using OR;
boxes[1] = boxes[1] or (value_cd eq "New_par");
boxes[2] = boxes[2] or (value_cd eq "Rev_par");
boxes[3] = boxes[3] or (value_cd eq "New_pro");
if last_row then do;
if boxes[1]
then checked_attribute='checked';
else checked_attribute='';
put '<input type=checkbox disabled ' checked_attribute '/> <label>New Parameter</label> <br /> <hr /> ';
if boxes[2]
then checked_attribute='checked';
else checked_attribute='';
put '<input type=checkbox disabled ' checked_attribute '/> <label>Revised Parameter</label> <br /> <hr /> ';
if boxes[3]
then checked_attribute='checked';
else checked_attribute='';
put '<input type=checkbox disabled ' checked_attribute '/> <label>New Process</label> <br /> <hr /> ';
end;
run;
注意:上面的代码实际上是将value_cd数据从列旋转到单行。
在DATA Step中,变量值通常会在隐式循环的顶部重置为缺失(在这种情况下,当您从第1行转到第2行时)。为了跟踪行到行的条件,不应该通过隐式循环重置变量。
有两种方法可以避免重置:
RETAIN
变量_temporary_
数组SET
或do while
循环中使用do until
。