- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Posted 08-24-2018 08:02 PM
(984 views)
Hi,
I have the following type of dataset and have as many as 4000 permnos.
I am trying to do the following ,
min VAR(R.dr - SUM[w_i * R.s_i]) = min VAR(Dr - w*S) s.t. SUM(w_i) = 1; w_i > 0
(R.s_i include rmrf hml smb)
I am using the following code for this. The code works perfectly fine,when I run it for one permno only but I want to run this using a by variable (by permno and month). I am not sure how to incorporate this, I have read this document (http://support.sas.com/kb/42/332.html) but I am not getting how to apply this on my data.
Any help would be much appreciated.
proc corr data=return1 (drop=date) out=corrout(where=(_type_ ne 'CORR')) cov noprint; run; data stats(drop=_name_); set corrout; if _type_ = 'COV' then delete; run; proc transpose data=stats out=stats; id _type_; run; proc optmodel; /* declare parameters and read data */ set <str> ASSETS; str target = 'f'; set BENCH = ASSETS diff {target}; num cov {ASSETS, ASSETS}; read data stats into ASSETS=[_name_]; read data corrout(where=(_type_='COV')) into [_name_] {i in ASSETS} <cov[_name_,i]=col(i)>; /* let w1, w2, w3, w4 be the amount invested in each asset */ var x{1..4} >= 0; /* declare optimization model */ var W {BENCH} >= 0 <= 1; /* Var(X - Y) = Var(X) + Var(Y) - 2 Cov(X,Y) */ min Variance = sum {i in BENCH, j in BENCH} cov[i,j] * W[i] * W[j] + cov[target,target] - 2 * sum {i in BENCH} cov[i,target] * W[i]; /* subject to the following constraints */ con weights: sum {i in BENCH} W[i] = 1; /* call solver and print optimal solution */ solve; print W; quit;
1 REPLY 1
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
The linked example illustrates a single BY variable. One approach for your pair of BY variables is to introduce a new variable that concatenates the two and then use that new variable as your BY variable.