1

500 株のティッカーを含む Excel ファイルがあります。大きな SAS データセットから、各株のリターンと追加の観察結果を抽出したいと考えています。たとえば、20 株のティッカーの場合、次のようにします。

data s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20;

set tick;
if stock='DIS' then output s1;
if stock='AA' then output s2; 
if stock='QCOM' then output s3; 
if stock='FB' then output s4; 
if stock='AMGN' then output s5;
if stock='AMZN' then output s6; 
if stock='AXP' then output s7; 
if stock='NWS' then output s8; 
if stock='INTC' then output s9; 
if stock='KRFT' then output s10;
if stock='CB' then output s11; 
if stock='CELG' then output s12; 
if stock='CMCSA' then output s13; 
if stock='COST' then  output s14; 
if stock='CSCO' then output s15;
if stock='YHOO' then output s16; 
if stock='DELL' then output s17; 
if stock='VOD' then output s18; 
if stock='DOW' then output s19; 
if stock='EBAY' then output s20;
run;

ここで、tickSAS データセットには株式リターンの母集団全体が含まれています。

次に、s1、s2....s20 ごとに、ループを使用して 20 の異なるファイル間で反復し、追加の SAS コードを適用します。

if stock='COST' then output s14;たとえば、各ティッカーに一連の SAS コードを適用する必要がある場合などに、SAS コードが 500 行でいっぱいになるのを避けたいと考えています。

Excel ファイルの各行を通過する SAS ループを作成する方法はありますか。たとえば、最初のティッカーを選択し、SAS データセットを作成してs1から、SAS コードをこのs1ファイルに適用します。ループの一番上で、Excel の 2 行目 (したがって 2 番目のティッカー) を選択し、プロセスを繰り返しますか?

4

2 に答える 2

2

第一に、物事を 1 つのデータ セットに残し、by groups を使用して下流の処理を行う方がよいでしょう。

必要に応じて、次のようなマクロを使用してこれをスクリプト化できます。

%macro split();
proc sql noprint;
select count(distinct stock)
    into :n
    from tick;

select distinct stock
    into :s1 - :s%left(&n)
    from tick;
quit;

data
    %do i=1 %to &n;
    s&i
    %end;
;
set tick;

%do i=1 %to &n;
   if stock = "&&s&i" then output s&i;
%end;
run;
%mend;

%split();
于 2013-09-04T01:11:51.753 に答える