代码之家  ›  专栏  ›  技术社区  ›  Azeem112

如何在SAS报告webout文件中打印选中和未选中的复选框

  •  1
  • Azeem112  · 技术社区  · 7 年前

    我有一个名称建议表,其中有一个列名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;
    

    我只想在报告中打印一次复选框,应根据表的value\u cd列的值对其进行选中或取消选中,但如果if条件中的值不相等,则会运行else语句,代码会打印复选框,直到value\u cd计数。

    如何根据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;
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Richard    7 年前

    按行显示发生了什么,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
    • 将您的所有状态信息放在一行中(即数据透视)
    推荐文章