BookmarkSubscribeRSS Feed
Amalik
Calcite | Level 5

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)

 

 

test.png

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
RobPratt
SAS Super FREQ

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.

sas-innovate-2026-white.png



April 27 – 30 | Gaylord Texan | Grapevine, Texas

Registration is open

Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!

Register now

Discussion stats
  • 1 reply
  • 1362 views
  • 0 likes
  • 2 in conversation