SAS宏程序:如何只對(duì)記錄數(shù)不為0的數(shù)據(jù)集進(jìn)行操作?

在工作中,有時(shí)一些操作只針對(duì)記錄數(shù)不為0的數(shù)據(jù)集進(jìn)行操作,在處理時(shí),就需要提前判斷。

程序思路介紹

判斷的思路不復(fù)雜,主要就是獲取數(shù)據(jù)集的記錄數(shù)。我常用的程序如下,其中省略號(hào)的部分是對(duì)記錄數(shù)不為0的數(shù)據(jù)集具體處理。

我最近做的是,只將記錄數(shù)不為0的數(shù)據(jù)集轉(zhuǎn)化成XPT文件,省略號(hào)處為轉(zhuǎn)XPT的宏程序。

%macro data(lib=, dt=);

%if %sysfunc(exist(&lib..&dt.)) %then %do;
  proc sql noprint;
    select nobs into: nobs
      from dictionary.tables
      where libname = upcase("&lib.") and memname = upcase("&dt.")
    ;
  quit;

  %if &nobs > 0 %then %do;
      ......
  %end;
%end;

%mend data;

根據(jù)數(shù)據(jù)集記錄是否為0 ,可以將數(shù)據(jù)集分為兩類。但是這有一個(gè)前提,就是這個(gè)數(shù)據(jù)集得存在。如果數(shù)據(jù)集不存在,下面的程序也不會(huì)有意義。判斷數(shù)據(jù)集是否存在,使用的是exist函數(shù),具體用法可以參考SAS Help Center: EXIST Function。

如果去掉判斷數(shù)據(jù)集是否存在的語句,SQL生成宏變量nobs的程序可以正常運(yùn)行,但不會(huì)生成宏變量,下面判斷語句中引用宏變量nobs時(shí)就會(huì)有Warning。

Log

SAS字典的訪問

數(shù)據(jù)集的觀測(cè)數(shù),是通過SAS字典來獲取,給大家展示一下SAS字典中的具體內(nèi)容,可以根據(jù)需要將字典中的信息保存到宏變量中,方便使用。

  proc sql noprint;
    create table tables as
    select *
      from dictionary.tables
      where libname = upcase("sashelp") 
    ;
  quit;
Tables

上面是通過SQL語句訪問SAS字典,我們也可以通過DATA步進(jìn)行訪問SAS字典,訪問之后也可以使用call symputx語句將需要的信息保存到宏變量中。

data tables;
  set sashelp.vtable
  where libname = upcase("sashelp")  and memname = "CLASS";
  call symputx("nobs", strip(nobs, best.));
run;

以上兩個(gè)程序?qū)Ρ?,SQL和Data步所取的SAS字典的數(shù)據(jù)集是不同的,dictionary.xxxx這一類數(shù)據(jù)集只能在SQL語句中進(jìn)行調(diào)用, sashelp.vxxxx在SQL和Data步中都可以調(diào)用。兩類數(shù)據(jù)集的命名也有區(qū)別,dictionary中,以s結(jié)尾,sashelp中以v開頭。我們可以看一下,SAS字典中有哪些數(shù)據(jù)集。

proc sql noprint;
  create table tmp as
    select *
      from sashelp.vtable
      where libname = "SASHELP" and substr(memname, 1,1)="V"
    ;
quit;
SAS字典

常用的SAS字典有macros, tables, columns,感興趣的讀者可以自己運(yùn)行下程序,看一下這幾個(gè)數(shù)據(jù)集中保存的信息。

總結(jié)

這篇文章介紹了只對(duì)記錄數(shù)不為0的數(shù)據(jù)集進(jìn)行操作的宏程序,也介紹了SAS字典的兩種訪問方式,希望對(duì)讀者SAS編程有幫助。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容