簡體   English   中英

SAS:如何使用RETAIN語句在DATA步驟中創建求和變量,相當於PROC PRINT中的SUM語句輸出

[英]SAS: How to use RETAIN statement to create a summed variable in the DATA step, equivalent to the SUM statement output in PROC PRINT

在SAS中,我正在嘗試創建一個另一個變量的變量。 在這種情況下,我試圖創建兩個變量: Total_All_Ages ,它是2013年美國人口POPESTIMATE2013的總和,以及Total_18Plus ,它是2013年美國18歲以上人口POPEST18PLUS2013

我希望這些變量的輸出看起來好像我在proc print下使用了sum語句(其中sum總和出現在新行的變量列的底部)。 但是,我不想使用print程序。 相反,我想僅使用data步驟創建輸出。

我需要這樣做的方法是使用retain (和input )語句。

我的代碼如下:

data _NULL_;
retain Total_All_Ages Total_18Plus;
infile RAWfoldr DLM=',' firstobs=3 obs=53;
informat STATE $2. NAME $20.;
input SUMLEV REGION $ DIVISION STATE $ NAME $ POPESTIMATE2013 POPEST18PLUS2013 PCNT_POPEST18PLUS;
    Total_All_Ages = sum(Total_All_Ages, POPESTIMATE2013);
    Total_18Plus = sum(Total_18Plus, POPEST18PLUS2013);
keep STATE NAME POPESTIMATE2013 POPEST18PLUS2013 Total_All_Ages Total_18Plus;
format POPESTIMATE2013 comma11. POPEST18PLUS2013 comma11.;
file print notitles;
if _n_=1 then put '=== U.S. Resident Population Estimates for All Ages and ===
                  Ages 18 or Older by State (in Alphabetical Order), 2013';
if _n_=1 then put ' ';
if _n_=1 then put @5 'FIPS Code' @16 'State Name' @40 'All Ages' @55 'Ages 18 or Older';
if _n_=1 then put ' ';
put @5 STATE @16 NAME @40 POPESTIMATE2013 @55 POPEST18PLUS2013;
run;

您可以在我的input語句中看到,我創建了我提到的兩個變量。 我也在retain聲明中提到它們。 但是,我不知道如何以我指定的方式使它們出現在我的輸出中。

我希望它們在輸出的底部顯示為Total行,如下所示:

                                                        POPESTIMATE2013  POPEST18PLUS2013
                                                        112312234        1234123412341234
                                                        23413412341234   213412341234



                       ============                      ============     ============
                       Total                             23423423429      242234545345 

有沒有辦法將這些變量放在輸出最底部的新行上(有點像我如何使用if _n_=1代碼放置變量標簽)?

如果我需要更好地解釋自己,請告訴我。 我很感激任何幫助。 謝謝。

如果我理解你的問題,你幾乎就在那里。

首先,將end=eof添加到infile語句中。 這會初始化一個等於0的變量“eof”,但只有當SAS讀取最后一行數據時才會等於1。 這也適用於set語句。

接下來,添加此do塊,當sas位於文件的最后一行時執行:

  if eof then do;
    put @5 9*'=' @40 11*'=' @55 11*'=';
    put @5 'Total' @40 Total_All_Ages comma11. @55 Total_18Plus comma11.;
  end;

在這里,您使用put語句打印格式(重復='標志)和總計。 完整代碼如下:

data _NULL_;
  retain Total_All_Ages Total_18Plus;
  infile RAWfoldr DLM=',' firstobs=3 obs=53 end=eof;
  informat STATE $2. NAME $20.;
  input SUMLEV REGION $ DIVISION STATE $ NAME $ POPESTIMATE2013 POPEST18PLUS2013 PCNT_POPEST18PLUS;
    Total_All_Ages = sum(Total_All_Ages, POPESTIMATE2013);
    Total_18Plus = sum(Total_18Plus, POPEST18PLUS2013);
  keep STATE NAME POPESTIMATE2013 POPEST18PLUS2013 Total_All_Ages Total_18Plus;
  format POPESTIMATE2013 comma11. POPEST18PLUS2013 comma11.;
  file print notitles;
  if _n_=1 then put '=== U.S. Resident Population Estimates for All Ages and ===
                    Ages 18 or Older by State (in Alphabetical Order), 2013';
  if _n_=1 then put ' ';
  if _n_=1 then put @5 'FIPS Code' @16 'State Name' @40 'All Ages' @55 'Ages 18 or Older';
  if _n_=1 then put ' ';
  put @5 STATE @16 NAME @40 POPESTIMATE2013 comma11. @55 POPEST18PLUS2013 comma11.;
  if eof then do;
    put @5 9*'=' @40 11*'=' @55 11*'=';
    put @5 'Total' @40 Total_All_Ages comma11. @55 Total_18Plus comma11.;
  end;
run;

關於代碼的最后一點注意事項:您可以通過在put語句中指定格式后跟“-r”來右對齊數字,例如:

  put @5 STATE @16 NAME @40 POPESTIMATE2013 comma11.-r @55 POPEST18PLUS2013 comma11.-r;

這將覆蓋您擁有的任何格式語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM