按行显示发生了什么,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\u 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\u cd数据从一列旋转到一行。
在数据步骤中,隐式循环顶部的变量值通常重置为缺失(在这种情况下,从第1行转到第2行)。为了逐行跟踪条件,隐式循环不应重置变量。
有几种方法可以避免重置:
-
使用
RETAIN
变量
-
使用
_temporary_
大堆
-
绝不允许隐式循环发生多次:
-
使用
SET
在显式编码的
do while
或
do until
环
-
将您的所有状态信息放在一行中(即数据透视)