關(guān)于本站
人大經(jīng)濟(jì)論壇-經(jīng)管之家:分享大學(xué)、考研、論文、會計、留學(xué)、數(shù)據(jù)、經(jīng)濟(jì)學(xué)、金融學(xué)、管理學(xué)、統(tǒng)計學(xué)、博弈論、統(tǒng)計年鑒、行業(yè)分析包括等相關(guān)資源。
經(jīng)管之家是國內(nèi)活躍的在線教育咨詢平臺!
經(jīng)管之家新媒體交易平臺
提供"微信號、微博、抖音、快手、頭條、小紅書、百家號、企鵝號、UC號、一點資訊"等虛擬賬號交易,真正實現(xiàn)買賣雙方的共贏!菊堻c擊這里訪問】
TOP熱門關(guān)鍵詞
宏作用:就是用來數(shù)一個序列的重復(fù)次數(shù)的在Matlab和R中,這個問題挺簡單的在SAS里就稍微復(fù)雜點,因為SAS只能在Data步里從上至下依次的循環(huán)%macroGetCountForSeq(SourceTable,TargetTable,ByFactors,InputVar,OutputV ...
免費學(xué)術(shù)公開課,掃碼加入 |
在Matlab和R中,這個問題挺簡單的
在SAS里就稍微復(fù)雜點,因為SAS只能在Data步里從上至下依次的循環(huán)
- %macro GetCountForSeq(SourceTable,TargetTable,ByFactors,InputVar,OutputVar);
- /**********************************************************************/
- /* 此宏的作用是計算某數(shù)據(jù)表中指定變量的重復(fù)次數(shù),即連續(xù)出現(xiàn)同一值的次 */
- /* 數(shù)。其中,SourceTable是原始表格;TargetTable是結(jié)果表格;ByFactors*/
- /* 是分組變量;InputVar是目標(biāo)變量,可設(shè)置為多個,用空格分隔;Output_*/
- /* Var是結(jié)果變量,其值為該觀測值在序列中重復(fù)的次數(shù),若不指定,則為原*/
- /* 目標(biāo)變量后加后綴_Cnt。注意,在運行本宏之前需要將原始表格進(jìn)行合適的 */
- /* 排序。 */
- /* */
- /* 最終得到包含原數(shù)據(jù)表中指定變量的重復(fù)次數(shù)的結(jié)果表格。 */
- /* */
- /* Created on 2012.12.21 */
- /* Modified on 2013.3.20 */
- /**********************************************************************/
- /* 檢查TargetTable的存在性,若不存在則設(shè)為&SourceTable */
- %if &TargetTable EQ %STR() %then %let TargetTable=&SourceTable;
- /* 檢查ByFactors的存在性 */
- %if &ByFactors NE %STR() %then %do;
- %ChkVar(SourceTable=&SourceTable,InputVar=&ByFactors,FlagVarExists=GCFS_FlagVarExists1);
- %if %SYSFUNC(FIND(&GCFS_FlagVarExists1,0)) NE 0 %then %do;
- %put ERROR: The ByFactors "%SCAN(&ByFactors,%SYSFUNC(FIND(&GCFS_FlagVarExists1,0)))" does not exist in SourceTable, please check it again.;
- %goto exit;
- %end;
- %end;
- /* 檢查InputVar的存在性 */
- %ChkVar(SourceTable=&SourceTable,InputVar=&InputVar,FlagVarExists=GCFS_FlagVarExists2);
- %if %SYSFUNC(FIND(&GCFS_FlagVarExists2,0)) NE 0 %then %do;
- %put ERROR: The InputVar "%SCAN(&InputVar,%SYSFUNC(FIND(&GCFS_FlagVarExists2,0)))" does not exist in SourceTable, please check it again.;
- %goto exit;
- %end;
- /* 拆分InputVar */
- %SeparateString(InputString=&InputVar,OutputString=GCFS_InputVar);
- /* 檢查OutputVar的合法性 */
- %if &OutputVar NE %STR() AND %SYSFUNC(COUNT(&InputVar,%STR( ))) NE %SYSFUNC(COUNT(&OutputVar,%STR( ))) %then %do;
- %put ERROR: The number of InputVar and OutputVar should be equal, please check it again.;
- %goto exit;
- %end;
- /* 若OutputVar為空,則設(shè)置為InputVar后加_Cnt后綴 */
- %if &OutputVar EQ %STR() %then %do;
- %let OutputVar=%SYSFUNC(TRANWRD(&InputVar,%STR( ),_Cnt%STR( )))_Cnt;
- %end;
- /* 拆分OutputVar */
- %SeparateString(InputString=&OutputVar,OutputString=GCFS_OutputVar);
- /* 開始進(jìn)行計算 */
- /* 第一步:生成新的分組變量 */
- data &TargetTable;
- set &SourceTable;
- GCFS_OrderVar=_N_;
- run;
- %do GCFS_i=1 %to &GCFS_InputVar_Num;
- data &TargetTable;
- set &TargetTable;
- retain GCFS_VarNo_&GCFS_i GCFS_ByFactors_&GCFS_i;
- by &ByFactors &&GCFS_InputVar_Var&GCFS_i NOTSORTED;
- if first.&&GCFS_InputVar_Var&GCFS_i then GCFS_VarNo_&GCFS_i.=1;
- else GCFS_VarNo_&GCFS_i.+1;
- if _N_=1 and first.&&GCFS_InputVar_Var&GCFS_i.=1 then GCFS_ByFactors_&GCFS_i.=1;
- else if first.&&GCFS_InputVar_Var&GCFS_i then GCFS_ByFactors_&GCFS_i.+1;
- run;
- %end;
- /* 第二步:得到計數(shù)變量 */
- %do GCFS_j=1 %to &GCFS_InputVar_Num;
- proc sort data=&TargetTable;
- by GCFS_ByFactors_&GCFS_j DESCENDING GCFS_VarNo_&GCFS_j.;
- run;
- data &TargetTable(drop=GCFS_ByFactors_&GCFS_j GCFS_VarNo_&GCFS_j.);
- set &TargetTable;
- by GCFS_ByFactors_&GCFS_j;
- retain &&GCFS_OutputVar_Var&GCFS_j;
- if first.GCFS_ByFactors_&GCFS_j then &&GCFS_OutputVar_Var&GCFS_j=GCFS_VarNo_&GCFS_j;
- run;
- %end;
- /* 刪除臨時生成的OrderVar */
- proc sort data=&TargetTable out=&TargetTable(drop=GCFS_OrderVar);
- by GCFS_OrderVar;
- run;
- %exit:
- %mend;
- %macro Demo();
- %let SourceTable=RankOfStk;
- %let TargetTable=RankOfStk1;
- %let ByFactors=;
- %let InputVar=PE_Rank; /* 需要處理的目標(biāo)變量,可設(shè)置為多個,用空格分隔 */
- %let OutputVar=;
- %GetCountForSeq(&SourceTable,&TargetTable,&ByFactors,&InputVar,&OutputVar);
- %mend;
「經(jīng)管之家」APP:經(jīng)管人學(xué)習(xí)、答疑、交友,就上經(jīng)管之家!
免流量費下載資料----在經(jīng)管之家app可以下載論壇上的所有資源,并且不額外收取下載高峰期的論壇幣。
涵蓋所有經(jīng)管領(lǐng)域的優(yōu)秀內(nèi)容----覆蓋經(jīng)濟(jì)、管理、金融投資、計量統(tǒng)計、數(shù)據(jù)分析、國貿(mào)、財會等專業(yè)的學(xué)習(xí)寶庫,各類資料應(yīng)有盡有。
來自五湖四海的經(jīng)管達(dá)人----已經(jīng)有上千萬的經(jīng)管人來到這里,你可以找到任何學(xué)科方向、有共同話題的朋友。
經(jīng)管之家(原人大經(jīng)濟(jì)論壇),跨越高校的圍墻,帶你走進(jìn)經(jīng)管知識的新世界。
掃描下方二維碼下載并注冊APP
免流量費下載資料----在經(jīng)管之家app可以下載論壇上的所有資源,并且不額外收取下載高峰期的論壇幣。
涵蓋所有經(jīng)管領(lǐng)域的優(yōu)秀內(nèi)容----覆蓋經(jīng)濟(jì)、管理、金融投資、計量統(tǒng)計、數(shù)據(jù)分析、國貿(mào)、財會等專業(yè)的學(xué)習(xí)寶庫,各類資料應(yīng)有盡有。
來自五湖四海的經(jīng)管達(dá)人----已經(jīng)有上千萬的經(jīng)管人來到這里,你可以找到任何學(xué)科方向、有共同話題的朋友。
經(jīng)管之家(原人大經(jīng)濟(jì)論壇),跨越高校的圍墻,帶你走進(jìn)經(jīng)管知識的新世界。
掃描下方二維碼下載并注冊APP
本文論壇網(wǎng)址:http://xalimeijing.com/thread-3602455-1-1.html
您可能感興趣的文章
人氣文章
本文標(biāo)題:SAS基礎(chǔ)宏之15:GetCountForSeq
本文鏈接網(wǎng)址:http://xalimeijing.com/jg/qikan_qikanku_3602455_1.html
2.轉(zhuǎn)載的文章僅代表原創(chuàng)作者觀點,與本站無關(guān)。其原創(chuàng)性以及文中陳述文字和內(nèi)容未經(jīng)本站證實,本站對該文以及其中全部或者部分內(nèi)容、文字的真實性、完整性、及時性,不作出任何保證或承若;
3.如本站轉(zhuǎn)載稿涉及版權(quán)等問題,請作者及時聯(lián)系本站,我們會及時處理。