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

时间:2017-12-05 16:02:08

标签: sas sas-macro

我在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表的总行或格式行。

简而言之,它不会在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;

1 个答案:

答案 0 :(得分:1)

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

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

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

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

修复这些应该让你更接近你想要的东西。