如何在 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 whiledo until 循环中使用 SET
  • 将所有状态信息放在一行中(即旋转)