如何在 SAS 报表 webout 文件中打印选中和未选中的复选框
How to print checked and unchecked check-boxes in SAS report webout file
我有一个名称为 table 的提案,其中有一个列名称 value_cd。
此列包含一些复选框的值,这些复选框将在我的 webout 报告中选中。我想选中所有相关值在此列中的复选框。
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;
我只想在我的报告中打印一次复选框,应该根据我的 table 的 value_cd 列的值来选中或取消选中它,但是当一个值不等于if condition 它运行 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;
按行发生了什么,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 数据从一列旋转到单行。
在数据步骤中,变量值通常在隐式循环的顶部重置为缺失值(在这种情况下,当您从第 1 行转到第 2 行时)。为了逐行跟踪条件,隐式循环不应重置变量。
有几种方法可以避免重置:
- 使用
RETAIN
变量
- 使用
_temporary_
数组
- 决不允许隐式循环出现多次:
- 在明确编码的
do while
或 do until
循环中使用 SET
。
- 将所有状态信息放在一行中(即旋转)
我有一个名称为 table 的提案,其中有一个列名称 value_cd。 此列包含一些复选框的值,这些复选框将在我的 webout 报告中选中。我想选中所有相关值在此列中的复选框。
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;
我只想在我的报告中打印一次复选框,应该根据我的 table 的 value_cd 列的值来选中或取消选中它,但是当一个值不等于if condition 它运行 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;
按行发生了什么,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 数据从一列旋转到单行。
在数据步骤中,变量值通常在隐式循环的顶部重置为缺失值(在这种情况下,当您从第 1 行转到第 2 行时)。为了逐行跟踪条件,隐式循环不应重置变量。
有几种方法可以避免重置:
- 使用
RETAIN
变量 - 使用
_temporary_
数组 - 决不允许隐式循环出现多次:
- 在明确编码的
do while
或do until
循环中使用SET
。
- 在明确编码的
- 将所有状态信息放在一行中(即旋转)