如何在报表中使用 group by 显示 sas 数据集

How to show sas data set using group by in report

我在 SAS EGRC 6.1 模块中工作,我在工作库中有如下数据集

SAGIA_Detail
 BranchCode BranchName RegionCode SagiaLicNo IssuingDate ExpiryDate  
   20         Abc      Central        1          1/1/2000     1/1/2001
   20         Abc      Central        2          1/1/2000     1/1/2001
   10         def      East           3          1/1/2000     1/1/2001

 BranchManager IsIssuance IssuanceFees IsRenewal RenewalFees Total
    name          Yes        100         No         0         100
    name          Yes        100         Yes        100       200
    name          Yes        200         Yes        100       300

我想在我的 SASStoredProcess 报告中打印此数据集,并按 BranchName 或 BranchName 分组。 我写了这段代码,但它只打印了我的数据集的数据行,没有 html table.

的任何总行或总计行

简而言之,在do循环的结束语句之后不执行任何代码。请帮我找出我在编码中哪里做错了。

data _null_;
 file _webout; 
 put '<html><body><table>';
 do until(last.region);
 set SAGIA_Detail nobs=nobs end=eof;
 by BranchCode RegionCode BranchName;
 if first.BranchCode then put
            '<tr><th colspan="9"><span><b><u>BranchCode</u></b>: ' BranchCode '</span><span><b><u>BranchName</u></b>: '  BranchName '</span><span><b><u>RegionCode</u></b>: ' RegionCode '</sapn></th></tr>
            <tr class=Head>
                        <th>Sagia LicenseNo</th>
                        <th>Issue Date</th>
                        <th>Expiry Date</th>
                        <th>Manager Name</th>
                        <th>Is Issuance</th>
                        <th>Issuance Fees</th>
                        <th>Is Renewal</th>
                        <th>Renewal Fees</th>
                        <th>Total</th>
                    </tr>';
            put '<tr>
                    <td>';put SagiaLicNo; put '</td>
                    <td>';put IssuingDate date10.; put '</td>
                    <td>';put ExpiryDate  date10.; put '</td>
                    <td>';put BranchManager; put '</td>
                    <td>';put IsIssuance; put '</td>
                    <td>';put IssuanceFees comma12.2; put '</td>
                    <td>';put IsRenewal; put '</td>
                    <td>';put RenewalFees comma12.2; put '</td>
                    <td>';put Total comma12.2; put '</td>
                </tr>';

                Total_IssuanceFees = sum(Total_IssuanceFees,IssuanceFees);
                Total_RenewalFees = sum(Total_RenewalFees,RenewalFees);
                Total_TotalFees = sum(Total_TotalFees,Total);
  end;

  put           '<tr>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>';

put             '<tr class=Grand>
                    <td>Grand</td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td>' Total_IssuanceFees  '</td>
                    <td></td>
                    <td>' Total_RenewalFees  '</td>
                    <td>' Total_TotalFees '</td>
                </tr>';

                Issuancegrand+Total_IssuanceFees;
                Renewalgrand+Total_RenewalFees;
                Totalgrand+Total_TotalFees;

 if eof then put
  '<tr class=Grand>
      <td colspan="6">GrandTotal</td>'
      '<td>' Issuancegrand '</td>'
      '<td>' Renewalgrand '</td>'
      '<td>' Totalgrand '</td></tr>'
  '</table>
 </body>
</html>';

run;

首先,您使用的是 BY 子句,请确保您的数据已排序。

proc sort data=SAGIA_Detail;
 by BranchCode RegionCode BranchName;
run;

其次,您的示例数据具有变量 BranchRegion,但您的代码使用 RegionCode。这些是一样的吗?确保您的代码使用的是实际存在的变量。

此外,您的数据步骤引用了 last.region。没有 region 变量。

解决这些问题会让您更接近您要寻找的东西。