<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Solving OLS regression after cleaning empty columns in SAS/IML Software and Matrix Computations</title>
    <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Solving-OLS-regression-after-cleaning-empty-columns/m-p/189215#M1925</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Here's an example of how I'd solve the problem without using any determinants or IF-THEN statements.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc iml;&lt;BR /&gt;x = randnormal(100, j(1,6,0), I(6));&lt;BR /&gt;y = randnormal(100, 0, 1);&lt;BR /&gt;x[,3]=0; x[,6]=0;&amp;nbsp; /* set some columns to exact 0 */&lt;/P&gt;&lt;P&gt;xpx = x`*x;&amp;nbsp; /* normal equations */&lt;BR /&gt;xpy = x`*y;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* Option 1: Use generalized inverse to solve (possibly singular) normal equations */&lt;BR /&gt;beta = ginv(xpx)* xpy;&lt;BR /&gt;print beta;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* Option 2: delete columns of xpx that are exactly zero. &lt;BR /&gt;&amp;nbsp;&amp;nbsp; Set coeffs of deleted columns to missing */&lt;BR /&gt;beta = j(nrow(xpx), 1, .);&amp;nbsp; /* or you can initialize beta to zero */&lt;BR /&gt;dropVars = loc( xpx[##,]=0 );&lt;BR /&gt;keepVars = setdif(1:ncol(xpx), dropVars);&lt;BR /&gt;beta[keepVars] = solve(xpx[keepVars,keepVars], xpy[keepVars]);&lt;BR /&gt;print beta;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 24 Apr 2014 18:11:54 GMT</pubDate>
    <dc:creator>Rick_SAS</dc:creator>
    <dc:date>2014-04-24T18:11:54Z</dc:date>
    <item>
      <title>Solving OLS regression after cleaning empty columns</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Solving-OLS-regression-after-cleaning-empty-columns/m-p/189204#M1914</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear all,&lt;/P&gt;&lt;P&gt;I wrote a simulation that about ten percent of the time end with a matrix data that contains one&amp;nbsp; 'zero' column.&lt;/P&gt;&lt;P&gt;I identify those cases with&amp;nbsp;&amp;nbsp; if abs(det(xpx))=0.&lt;/P&gt;&lt;P&gt;I clean the zero column and I try to calculate the OLS coefficients.&lt;/P&gt;&lt;P&gt;But unfortunately I get a matrix without the OLS coefficients.&lt;/P&gt;&lt;P&gt;The program works but I don't get the 10 percent&amp;nbsp; results matrix with data, even though I record the data files and there should be coefficients for the OLS. (data with the zero columns).&lt;/P&gt;&lt;P&gt;I don't understand why. I enclose the program. You can 'run' it and see the results.&lt;/P&gt;&lt;P&gt;1. Can someone understand why I get matrix without data for the 10 percent cases of the simulation?&lt;/P&gt;&lt;P&gt;2. Any suggestions how to correct that?&lt;/P&gt;&lt;P&gt;3. &lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;Maybe there is more efficient way to write this program that at the end I can get one matrix with also the 10 percent result, Ideas are welcome..&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;Thanks in &lt;/SPAN&gt;advance!&lt;/P&gt;&lt;P&gt;Orit&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;proc iml;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;n=100;&lt;/P&gt;&lt;P&gt;b=j(6,n);&lt;/P&gt;&lt;P&gt;bpsl=j(5,n);&lt;/P&gt;&lt;P&gt;bnsl=j(5,n);&lt;/P&gt;&lt;P&gt;bptl=j(5,n);&lt;/P&gt;&lt;P&gt;bntl=j(5,n);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do j=1 to n;&lt;/P&gt;&lt;P&gt;&amp;nbsp; xtl=j(240, 1);&lt;/P&gt;&lt;P&gt;&amp;nbsp; xsl=j(240, 1);&lt;/P&gt;&lt;P&gt;&amp;nbsp; ptl=j(240, 1);&lt;/P&gt;&lt;P&gt;&amp;nbsp; psl=j(240, 1);&lt;/P&gt;&lt;P&gt;&amp;nbsp; ntl=j(240, 1);&lt;/P&gt;&lt;P&gt;&amp;nbsp; nsl=j(240, 1);&lt;/P&gt;&lt;P&gt;&amp;nbsp; y=j(240, 1);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; xtl[1,1]=-1.73754E-16;*/SAS avg obs*/;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xsl[1,1] =-1.12557E-15;&lt;/P&gt;&lt;P&gt;&amp;nbsp; ptl[1,1]=0.0051111;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; psl[1,1] =0.2604981;&lt;/P&gt;&lt;P&gt;&amp;nbsp; ntl[1,1]=-0.0051111;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nsl[1,1] =-0.2604981;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; y[1,1] =0.9783607;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; a=0.18935 ;*first regression*;&lt;/P&gt;&lt;P&gt;&amp;nbsp; k=0.83843;&lt;/P&gt;&lt;P&gt;&amp;nbsp; ka=0.17226;&lt;/P&gt;&lt;P&gt;&amp;nbsp; kb=-0.39250;&lt;/P&gt;&lt;P&gt;&amp;nbsp; kc=-0.21518;&lt;/P&gt;&lt;P&gt;&amp;nbsp; kd=5.16021;&lt;/P&gt;&lt;P&gt;&amp;nbsp; c=-0.03537; *second regression*;&lt;/P&gt;&lt;P&gt;&amp;nbsp; e=0.02979;&lt;/P&gt;&lt;P&gt;&amp;nbsp; d=0.94756;&lt;/P&gt;&lt;P&gt;&amp;nbsp; h=-2.04415;&lt;/P&gt;&lt;P&gt;&amp;nbsp; m=-0.00034939; *third regression*;&lt;/P&gt;&lt;P&gt;&amp;nbsp; l=0.00023025;&lt;/P&gt;&lt;P&gt;&amp;nbsp; q=-0.00045077;&lt;/P&gt;&lt;P&gt;&amp;nbsp; r=0.98906;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /** specify the mean and covariance of the population **/&lt;/P&gt;&lt;P&gt;&amp;nbsp; Mean = {0, 0, 0};&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cov = {0.0467930604 0.0024632274 0.0000520215, &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0024632274 0.0080371426 0.0000384574,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; 0.0000520215 0.0000384574 0.0000022165}; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; NumSamples = 240;&lt;/P&gt;&lt;P&gt;&amp;nbsp; call randseed(0);&amp;nbsp; /** set seed for the RandNormal module **/&lt;/P&gt;&lt;P&gt;&amp;nbsp; U = RandNormal(NumSamples, Mean, Cov);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do i=2 to 240;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; Y[i,1]=a+k*y[(i-1),1]+ka*psl[(i-1),1]+kb*ptl[(i-1),1]+kc*nsl[(i-1),1]+kd*ntl[(i-1),1]+u[i,1];&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xsl[i,1]=c+e*y[(i-1),1]+d*xsl[(i-1),1]+h*xtl[(i-1),1]+u[i,2];&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xtl[i,1]=m+l*y[(i-1),1]+q*xsl[(i-1),1]+r*xtl[(i-1),1]+u[i,3]; &lt;/P&gt;&lt;P&gt;&amp;nbsp; if xsl[i,1]&amp;gt;=0 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; psl[i,1]=xsl[i,1]; &lt;/P&gt;&lt;P&gt;&amp;nbsp; nsl[i,1]=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end; &lt;/P&gt;&lt;P&gt;&amp;nbsp; if xsl[i,1]&amp;lt;0 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; psl[i,1]=0; &lt;/P&gt;&lt;P&gt;&amp;nbsp; nsl[i,1]=xsl[i,1];&lt;/P&gt;&lt;P&gt;&amp;nbsp; end; &lt;/P&gt;&lt;P&gt;&amp;nbsp; if xtl[i,1]&amp;gt;=0 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; ptl[i,1]=xtl[i,1]; &lt;/P&gt;&lt;P&gt;&amp;nbsp; ntl[i,1]=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end; &lt;/P&gt;&lt;P&gt;&amp;nbsp; if xtl[i,1]&amp;lt;0 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; ptl[i,1]=0; &lt;/P&gt;&lt;P&gt;&amp;nbsp; ntl[i,1]=xtl[i,1];&lt;/P&gt;&lt;P&gt;&amp;nbsp; end; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ylag=lag(y);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Step 1: Compute X`X and X`y */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; x = j(nrow(y), 1, 1) || ylag || psl|| ptl ||nsl||ntl;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* add intercept column */&lt;/P&gt;&lt;P&gt;&amp;nbsp; v = {1};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* specify rows to exclude&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; idx = setdif(1:nrow(x), v);&amp;nbsp; /* start with 1:240, exclude values in v */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xnew = x[idx, ];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* extract submatrix&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xpx = xnew`* xnew;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* cross-products&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp; v = {1};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* specify rows to exclude&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; idy = setdif(1:nrow(y), v);&amp;nbsp; /* start with 1:5, exclude values in v */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ynew = y[idx, ];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* extract submatrix*/ &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xpy = xnew` * ynew;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if abs(det(xpx))=0 then do; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; z1 = ynew || xnew;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; create SINGULAR from z1[c={Y Ylag psl ptl nsl ntl}];&lt;/P&gt;&lt;P&gt;&amp;nbsp; append from z1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; close SINGULAR;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if abs(det(xpx))=0 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; if ssq(psl)=0 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; z = j(nrow(y), 1, 1) || ylag || ptl ||nsl||ntl;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* add intercept column */&lt;/P&gt;&lt;P&gt;&amp;nbsp; v = {1};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* specify rows to exclude&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; idx = setdif(1:nrow(z), v);&amp;nbsp; /* start with 1:240, exclude values in v */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; znew = z[idx, ];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* extract submatrix&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; zpz = znew`* znew;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* cross-products&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp; v = {1};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* specify rows to exclude&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; idy = setdif(1:nrow(y), v);&amp;nbsp; /* start with 1:5, exclude values in v */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ynew = y[idx, ];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* extract submatrix*/ &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; zpy = znew` * ynew;&lt;/P&gt;&lt;P&gt;&amp;nbsp; bpsl[,j]= solve(zpz, xpy);&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if ssq(ptl)=0 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; z = j(nrow(y), 1, 1) || ylag || psl||nsl||ntl;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* add intercept column */&lt;/P&gt;&lt;P&gt;&amp;nbsp; v = {1};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* specify rows to exclude&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; idx = setdif(1:nrow(z), v);&amp;nbsp; /* start with 1:240, exclude values in v */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; znew = z[idx, ];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* extract submatrix&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; zpz = znew`* znew;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* cross-products&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp; v = {1};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* specify rows to exclude&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; idy = setdif(1:nrow(y), v);&amp;nbsp; /* start with 1:5, exclude values in v */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ynew = y[idx, ];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* extract submatrix*/ &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; zpy = znew` * ynew;&lt;/P&gt;&lt;P&gt;&amp;nbsp; bptl[,j]= solve(zpz, xpy);&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if ssq(nsl)=0 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; z = j(nrow(y), 1, 1) || ylag || psl|| ptl ||ntl;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* add intercept column */&lt;/P&gt;&lt;P&gt;&amp;nbsp; v = {1};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* specify rows to exclude&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; idx = setdif(1:nrow(z), v);&amp;nbsp; /* start with 1:240, exclude values in v */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; znew = x[idx, ];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* extract submatrix&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; zpz = znew`* xnew;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* cross-products&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp; v = {1};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* specify rows to exclude&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; idy = setdif(1:nrow(y), v);&amp;nbsp; /* start with 1:5, exclude values in v */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ynew = y[idx, ];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* extract submatrix*/ &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; zpy = znew` * ynew;&lt;/P&gt;&lt;P&gt;&amp;nbsp; bnsl[,j]= solve(zpz, xpy);&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if&amp;nbsp; ssq(ntl)=0 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; z = j(nrow(y), 1, 1) || ylag || psl|| ptl ||nsl;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* add intercept column */&lt;/P&gt;&lt;P&gt;&amp;nbsp; v = {1};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* specify rows to exclude&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; idx = setdif(1:nrow(x), v);&amp;nbsp; /* start with 1:240, exclude values in v */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; znew = x[idx, ];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* extract submatrix&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; zpz = znew`* znew;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* cross-products&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp; v = {1};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* specify rows to exclude&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; idy = setdif(1:nrow(y), v);&amp;nbsp; /* start with 1:5, exclude values in v */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ynew = y[idx, ];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* extract submatrix*/ &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; zpy = znew` * ynew;&lt;/P&gt;&lt;P&gt;&amp;nbsp; bntl[,j]= solve(zpz, xpy);&lt;/P&gt;&lt;P&gt;&amp;nbsp; end; &lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; IF(abs(DET(xpx)))&amp;gt;0 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; *xpxi = inv(xpx); /* form inverse crossproducts */&lt;/P&gt;&lt;P&gt;&amp;nbsp; *b[,j] = xpxi * xpy; /* solve for parameter estimates */&lt;/P&gt;&lt;P&gt;&amp;nbsp; *b= solve(xpx, xpy);&lt;/P&gt;&lt;P&gt;&amp;nbsp; *print b;&lt;/P&gt;&lt;P&gt;&amp;nbsp; b[,j]= solve(xpx, xpy);&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; bt=b`;&lt;/P&gt;&lt;P&gt;&amp;nbsp; varNames = "b0":"b5";&lt;/P&gt;&lt;P&gt;&amp;nbsp; experiment="Sim1":"Sim100";&lt;/P&gt;&lt;P&gt;&amp;nbsp; print bt[colname=varNames &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rowname=experiment&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; label="Expanded Model"];&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; bpslt=bpsl`;&lt;/P&gt;&lt;P&gt;&amp;nbsp; varNames = "b0":"b4";&lt;/P&gt;&lt;P&gt;&amp;nbsp; experiment="Sim1":"Sim100";&lt;/P&gt;&lt;P&gt;&amp;nbsp; print bpslt[colname=varNames &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rowname=experiment&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; label="Expanded Model"];&lt;/P&gt;&lt;P&gt;&amp;nbsp; bnslt=bnsl`;&lt;/P&gt;&lt;P&gt;&amp;nbsp; varNames = "b0":"b4";&lt;/P&gt;&lt;P&gt;&amp;nbsp; experiment="Sim1":"Sim100";&lt;/P&gt;&lt;P&gt;&amp;nbsp; print bnslt[colname=varNames &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rowname=experiment&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; label="Expanded Model"];&lt;/P&gt;&lt;P&gt;&amp;nbsp; bptlt=bptl`;&lt;/P&gt;&lt;P&gt;&amp;nbsp; varNames = "b0":"b4";&lt;/P&gt;&lt;P&gt;&amp;nbsp; experiment="Sim1":"Sim100";&lt;/P&gt;&lt;P&gt;&amp;nbsp; print bptlt[colname=varNames &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rowname=experiment&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; label="Expanded Model"];&lt;/P&gt;&lt;P&gt;&amp;nbsp; bntlt=bntl`;&lt;/P&gt;&lt;P&gt;&amp;nbsp; varNames = "b0":"b4";&lt;/P&gt;&lt;P&gt;&amp;nbsp; experiment="Sim1":"Sim100";&lt;/P&gt;&lt;P&gt;&amp;nbsp; print bntlt[colname=varNames &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rowname=experiment&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; label="Expanded Model"];&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; quit;&lt;/P&gt;&lt;P&gt;&amp;nbsp; proc print data=singular;&lt;/P&gt;&lt;P&gt;&amp;nbsp; run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 22 Apr 2014 13:38:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Solving-OLS-regression-after-cleaning-empty-columns/m-p/189204#M1914</guid>
      <dc:creator>oriti</dc:creator>
      <dc:date>2014-04-22T13:38:49Z</dc:date>
    </item>
    <item>
      <title>Re: Solving OLS regression after cleaning empty columns</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Solving-OLS-regression-after-cleaning-empty-columns/m-p/189205#M1915</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Given the complexity of your program, it is difficult to answer your questions.&lt;/P&gt;&lt;P&gt;Try this: Make the program reproducible by using a positive seed to the&amp;nbsp; RANDSEED call, such as seed=1. You then can say something like&lt;/P&gt;&lt;P&gt;"During iteration j=3 [or whatever], my program computes [specify matrices and values that you don't understand].&amp;nbsp; I expect to see [what you think should happen].&amp;nbsp; Can anyone explain why I don't get what I expect?"&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 22 Apr 2014 14:36:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Solving-OLS-regression-after-cleaning-empty-columns/m-p/189205#M1915</guid>
      <dc:creator>Rick_SAS</dc:creator>
      <dc:date>2014-04-22T14:36:04Z</dc:date>
    </item>
    <item>
      <title>Re: Solving OLS regression after cleaning empty columns</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Solving-OLS-regression-after-cleaning-empty-columns/m-p/189206#M1916</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you Rick for your tip. I'll try to be more clear.&lt;/P&gt;&lt;P&gt;I used Rick tip- I used in the RANDSEED call seed=1,&lt;/P&gt;&lt;P&gt;and during iteration 96 I got column of zero's in the variable 'ptl'.&lt;/P&gt;&lt;P&gt;I have to exclude that variable because the matrix is not invertible.&lt;/P&gt;&lt;P&gt;I catch those situations by the if statement&amp;nbsp;&amp;nbsp; &lt;SPAN style="background-color: #ffffff; font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif;"&gt;&lt;STRONG&gt; if abs(det(xpx))=0 then do;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: #ffffff; font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif;"&gt;&lt;STRONG&gt;And then I have to recognize that variable (&lt;SPAN style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt; ssq(ptl)=0&lt;/SPAN&gt;) and exclude him by:&amp;nbsp; &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;if ssq(ptl)=0 then do;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&lt;STRONG&gt; z = j(nrow(y), 1, 1) || ylag || psl || nsl || ntl;&amp;nbsp; &lt;/STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Without ptl variable */&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp; v = {1};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* specify rows to exclude&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; idx = setdif(1:nrow(z), v);&amp;nbsp; /* start with 1:240, exclude values in v */&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; znew = z[idx, ];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* extract submatrix&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; zpz = znew`* znew;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* cross-products&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp; v = {1};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* specify rows to exclude&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; idy = setdif(1:nrow(y), v);&amp;nbsp; /* start with 1:5, exclude values in v */&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ynew = y[idx, ];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* extract submatrix*/&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; zpy = znew` * ynew;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&lt;STRONG&gt; bptl[,j]= solve(zpz, xpy);&lt;/STRONG&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;But I get the matrix bptl&amp;nbsp; (bptlt=bptl`;) of coefficients OLS results empty in simulation 96.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;I'll really appreciate any help,&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Orit&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 23 Apr 2014 13:16:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Solving-OLS-regression-after-cleaning-empty-columns/m-p/189206#M1916</guid>
      <dc:creator>oriti</dc:creator>
      <dc:date>2014-04-23T13:16:22Z</dc:date>
    </item>
    <item>
      <title>Re: Solving OLS regression after cleaning empty columns</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Solving-OLS-regression-after-cleaning-empty-columns/m-p/189207#M1917</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I think you cut and pasted and forgot to change variable names.&amp;nbsp; Shouldn't the assignment statement be&lt;/P&gt;&lt;P&gt;bptl[,j]= solve(zpz, zpy);&amp;nbsp; /* ZPY, not XPY */&lt;/P&gt;&lt;P&gt;If this is the mistake, you've made it other places as well.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'll also mention that you don't need to compute IDY.&amp;nbsp; IDX and IDY are the same.&amp;nbsp; This is fortunate because your program computes&lt;/P&gt;&lt;P&gt;ynew = y[idx, ];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* should be IDY in subscript */&lt;/P&gt;&lt;P&gt;but it doesn't matter because IDX=IDY.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Your code assumes that you never have multiple zero columns. That is ssq(psl)=0 and ssq(ptl)=0 are assumed never to happen simultaneously.&amp;nbsp;&amp;nbsp; If you can have multiple columns be zero simultaneously, you might consider treating all cases at once:&lt;/P&gt;&lt;P&gt;1) Form x matrix&lt;/P&gt;&lt;P&gt;2) compute ssq = x[##, ]; /* ssq for each column */&lt;/P&gt;&lt;P&gt;3) badCols = loc(ssq=0);&amp;nbsp; /* check for all zeros */&lt;/P&gt;&lt;P&gt;4) remove the bad columns, then compute parameter estimates for the good columns, etc&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 23 Apr 2014 14:12:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Solving-OLS-regression-after-cleaning-empty-columns/m-p/189207#M1917</guid>
      <dc:creator>Rick_SAS</dc:creator>
      <dc:date>2014-04-23T14:12:18Z</dc:date>
    </item>
    <item>
      <title>Re: Solving OLS regression after cleaning empty columns</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Solving-OLS-regression-after-cleaning-empty-columns/m-p/189208#M1918</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear Rick,&lt;/P&gt;&lt;P&gt;Thanks for your comments and ideas, I corrected those mistakes.&lt;/P&gt;&lt;P&gt;But, unfortunately SAS doesn't recognize this part of the program,( in the 'log' it seems that everything is o.k)&lt;/P&gt;&lt;P&gt;I tried to print the Z, ZPZ, ZPY matrices but I get "ERROR: Matrix z has not been set to a value"&lt;/P&gt;&lt;P&gt;even though in iteration 96 it should be with a value.&lt;/P&gt;&lt;P&gt;Why it doesn't create the Z matrix?&amp;nbsp; ( in the part that starts with:&amp;nbsp; &lt;STRONG&gt; if abs(det(xpx))=0 then do;&lt;/STRONG&gt;)&lt;/P&gt;&lt;P&gt;Thank you!&lt;/P&gt;&lt;P&gt;Orit&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;enclose the corrected program:&lt;/P&gt;&lt;P&gt;proc iml;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;n=100;&lt;/P&gt;&lt;P&gt;b=j(6,n);&lt;/P&gt;&lt;P&gt;bpsl=j(5,n);&lt;/P&gt;&lt;P&gt;bnsl=j(5,n);&lt;/P&gt;&lt;P&gt;bptl=j(5,n);&lt;/P&gt;&lt;P&gt;bntl=j(5,n);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do j=1 to n;&lt;/P&gt;&lt;P&gt;&amp;nbsp; xtl=j(240, 1);&lt;/P&gt;&lt;P&gt;&amp;nbsp; xsl=j(240, 1);&lt;/P&gt;&lt;P&gt;&amp;nbsp; ptl=j(240, 1);&lt;/P&gt;&lt;P&gt;&amp;nbsp; psl=j(240, 1);&lt;/P&gt;&lt;P&gt;&amp;nbsp; ntl=j(240, 1);&lt;/P&gt;&lt;P&gt;&amp;nbsp; nsl=j(240, 1);&lt;/P&gt;&lt;P&gt;&amp;nbsp; y=j(240, 1);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; xtl[1,1]=-1.73754E-16;*/SAS avg obs*/;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xsl[1,1] =-1.12557E-15;&lt;/P&gt;&lt;P&gt;&amp;nbsp; ptl[1,1]=0.0051111;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; psl[1,1] =0.2604981;&lt;/P&gt;&lt;P&gt;&amp;nbsp; ntl[1,1]=-0.0051111;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nsl[1,1] =-0.2604981;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; y[1,1] =0.9783607;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; a=0.18935 ;*first regression*;&lt;/P&gt;&lt;P&gt;&amp;nbsp; k=0.83843;&lt;/P&gt;&lt;P&gt;&amp;nbsp; ka=0.17226;&lt;/P&gt;&lt;P&gt;&amp;nbsp; kb=-0.39250;&lt;/P&gt;&lt;P&gt;&amp;nbsp; kc=-0.21518;&lt;/P&gt;&lt;P&gt;&amp;nbsp; kd=5.16021;&lt;/P&gt;&lt;P&gt;&amp;nbsp; c=-0.03537; *second regression*;&lt;/P&gt;&lt;P&gt;&amp;nbsp; e=0.02979;&lt;/P&gt;&lt;P&gt;&amp;nbsp; d=0.94756;&lt;/P&gt;&lt;P&gt;&amp;nbsp; h=-2.04415;&lt;/P&gt;&lt;P&gt;&amp;nbsp; m=-0.00034939; *third regression*;&lt;/P&gt;&lt;P&gt;&amp;nbsp; l=0.00023025;&lt;/P&gt;&lt;P&gt;&amp;nbsp; q=-0.00045077;&lt;/P&gt;&lt;P&gt;&amp;nbsp; r=0.98906;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /** specify the mean and covariance of the population **/&lt;/P&gt;&lt;P&gt;&amp;nbsp; Mean = {0, 0, 0};&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cov = {0.0467930604 0.0024632274 0.0000520215,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0024632274 0.0080371426 0.0000384574,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; 0.0000520215 0.0000384574 0.0000022165};&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; NumSamples = 240;&lt;/P&gt;&lt;P&gt;&amp;nbsp; call randseed(1);&amp;nbsp; /** set seed for the RandNormal module **/&lt;/P&gt;&lt;P&gt;&amp;nbsp; U = RandNormal(NumSamples, Mean, Cov);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do i=2 to 240;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; Y[i,1]=a+k*y[(i-1),1]+ka*psl[(i-1),1]+kb*ptl[(i-1),1]+kc*nsl[(i-1),1]+kd*ntl[(i-1),1]+u[i,1];&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xsl[i,1]=c+e*y[(i-1),1]+d*xsl[(i-1),1]+h*xtl[(i-1),1]+u[i,2];&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xtl[i,1]=m+l*y[(i-1),1]+q*xsl[(i-1),1]+r*xtl[(i-1),1]+u[i,3];&lt;/P&gt;&lt;P&gt;&amp;nbsp; if xsl[i,1]&amp;gt;=0 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; psl[i,1]=xsl[i,1];&lt;/P&gt;&lt;P&gt;&amp;nbsp; nsl[i,1]=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if xsl[i,1]&amp;lt;0 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; psl[i,1]=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; nsl[i,1]=xsl[i,1];&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if xtl[i,1]&amp;gt;=0 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; ptl[i,1]=xtl[i,1];&lt;/P&gt;&lt;P&gt;&amp;nbsp; ntl[i,1]=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if xtl[i,1]&amp;lt;0 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; ptl[i,1]=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; ntl[i,1]=xtl[i,1];&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ylag=lag(y);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Step 1: Compute X`X and X`y */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; x = j(nrow(y), 1, 1) || ylag || psl|| ptl ||nsl||ntl;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* add intercept column */&lt;/P&gt;&lt;P&gt;&amp;nbsp; v = {1};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* specify rows to exclude&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; idx = setdif(1:nrow(x), v);&amp;nbsp; /* start with 1:240, exclude values in v */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xnew = x[idx, ];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* extract submatrix&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xpx = xnew`* xnew;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* cross-products&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ynew = y[idx, ];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* extract submatrix*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xpy = xnew` * ynew;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if abs(det(xpx))=0 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; z1 = ynew || xnew;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; create SINGULAR from z1[c={Y Ylag psl ptl nsl ntl}];&lt;/P&gt;&lt;P&gt;&amp;nbsp; append from z1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; close SINGULAR;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if abs(det(xpx))=0 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; if ssq(psl)=0 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; z = j(nrow(y), 1, 1) || ylag || ptl ||nsl||ntl;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* add intercept column */&lt;/P&gt;&lt;P&gt;&amp;nbsp; v = {1};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* specify rows to exclude&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; idx = setdif(1:nrow(z), v);&amp;nbsp; /* start with 1:240, exclude values in v */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; znew = z[idx, ];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* extract submatrix&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; zpz = znew`* znew;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* cross-products&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ynew = y[idx, ];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* extract submatrix*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; zpy = znew` * ynew;&lt;/P&gt;&lt;P&gt;&amp;nbsp; bpsl[,j]= solve(zpz, zpy);&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if ssq(ptl)=0 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; z = j(nrow(y), 1, 1) || ylag || psl||nsl||ntl;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* add intercept column */&lt;/P&gt;&lt;P&gt;&amp;nbsp; v = {1};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* specify rows to exclude&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; idx = setdif(1:nrow(z), v);&amp;nbsp; /* start with 1:240, exclude values in v */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; znew = z[idx, ];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* extract submatrix&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; zpz = znew`* znew;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* cross-products&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ynew = y[idx, ];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* extract submatrix*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; zpy = znew` * ynew;&lt;/P&gt;&lt;P&gt;&amp;nbsp; bptl[,j]= solve(zpz, zpy);&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if ssq(nsl)=0 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; z = j(nrow(y), 1, 1) || ylag || psl|| ptl ||ntl;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* add intercept column */&lt;/P&gt;&lt;P&gt;&amp;nbsp; v = {1};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* specify rows to exclude&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; idx = setdif(1:nrow(z), v);&amp;nbsp; /* start with 1:240, exclude values in v */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; znew = z[idx, ];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* extract submatrix&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; zpz = znew`* xnew;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* cross-products&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ynew = y[idx, ];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* extract submatrix*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; zpy = znew` * ynew;&lt;/P&gt;&lt;P&gt;&amp;nbsp; bnsl[,j]= solve(zpz, zpy);&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if&amp;nbsp; ssq(ntl)=0 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; z = j(nrow(y), 1, 1) || ylag || psl|| ptl ||nsl;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* add intercept column */&lt;/P&gt;&lt;P&gt;&amp;nbsp; v = {1};&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* specify rows to exclude&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; idx = setdif(1:nrow(x), v);&amp;nbsp; /* start with 1:240, exclude values in v */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; znew = z[idx, ];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* extract submatrix&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; zpz = znew`* znew;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* cross-products&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ynew = y[idx, ];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* extract submatrix*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; zpy = znew` * ynew;&lt;/P&gt;&lt;P&gt;&amp;nbsp; bntl[,j]= solve(zpz, zpy);&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; IF(abs(DET(xpx)))&amp;gt;0 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; *xpxi = inv(xpx); /* form inverse crossproducts */&lt;/P&gt;&lt;P&gt;&amp;nbsp; *b[,j] = xpxi * xpy; /* solve for parameter estimates */&lt;/P&gt;&lt;P&gt;&amp;nbsp; *b= solve(xpx, xpy);&lt;/P&gt;&lt;P&gt;&amp;nbsp; *print b;&lt;/P&gt;&lt;P&gt;&amp;nbsp; b[,j]= solve(xpx, xpy);&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; bt=b`;&lt;/P&gt;&lt;P&gt;&amp;nbsp; varNames = "b0":"b5";&lt;/P&gt;&lt;P&gt;&amp;nbsp; experiment="Sim1":"Sim10000";&lt;/P&gt;&lt;P&gt;&amp;nbsp; print bt[colname=varNames&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rowname=experiment&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; label="Expanded Model"];&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; bpslt=bpsl`;&lt;/P&gt;&lt;P&gt;&amp;nbsp; varNames = "b0":"b4";&lt;/P&gt;&lt;P&gt;&amp;nbsp; experiment="Sim1":"Sim10000";&lt;/P&gt;&lt;P&gt;&amp;nbsp; print bpslt[colname=varNames&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rowname=experiment&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; label="Expanded Model"];&lt;/P&gt;&lt;P&gt;&amp;nbsp; bnslt=bnsl`;&lt;/P&gt;&lt;P&gt;&amp;nbsp; varNames = "b0":"b4";&lt;/P&gt;&lt;P&gt;&amp;nbsp; experiment="Sim1":"Sim10000";&lt;/P&gt;&lt;P&gt;&amp;nbsp; print bnslt[colname=varNames&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rowname=experiment&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; label="Expanded Model"];&lt;/P&gt;&lt;P&gt;&amp;nbsp; bptlt=bptl`;&lt;/P&gt;&lt;P&gt;&amp;nbsp; varNames = "b0":"b4";&lt;/P&gt;&lt;P&gt;&amp;nbsp; experiment="Sim1":"Sim10000";&lt;/P&gt;&lt;P&gt;&amp;nbsp; print bptlt[colname=varNames&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rowname=experiment&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; label="Expanded Model"];&lt;/P&gt;&lt;P&gt;&amp;nbsp; bntlt=bntl`;&lt;/P&gt;&lt;P&gt;&amp;nbsp; varNames = "b0":"b4";&lt;/P&gt;&lt;P&gt;&amp;nbsp; experiment="Sim1":"Sim10000";&lt;/P&gt;&lt;P&gt;&amp;nbsp; print bntlt[colname=varNames&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rowname=experiment&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; label="Expanded Model"];&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; quit;&lt;/P&gt;&lt;P&gt;&amp;nbsp; proc print data=singular;&lt;/P&gt;&lt;P&gt;&amp;nbsp; run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 24 Apr 2014 08:20:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Solving-OLS-regression-after-cleaning-empty-columns/m-p/189208#M1918</guid>
      <dc:creator>oriti</dc:creator>
      <dc:date>2014-04-24T08:20:50Z</dc:date>
    </item>
    <item>
      <title>Re: Solving OLS regression after cleaning empty columns</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Solving-OLS-regression-after-cleaning-empty-columns/m-p/189209#M1919</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear Rick,&lt;/P&gt;&lt;P&gt;I also used your advice and consider to treat all 'special' cases at once:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if abs(det(xpx))=0 then do;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ssq = xnew[##, ];&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; znew=xnew[ ,loc(ssq&amp;gt;0)];&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; zpz = znew`* znew;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; zpy = znew` * ynew;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bpsl[,j]= solve(zpz, zpy);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Even though it's really more short and efficient, the problem that I get coefficients but I don't know for which variables.&lt;/P&gt;&lt;P&gt;In the cases where &lt;STRONG&gt; if abs(det(xpx))=0&lt;/STRONG&gt;, each time the 'zero' columns come from different variable.&lt;/P&gt;&lt;P&gt;For statistical checks it's really important that I know for each variable his coefficient.&lt;/P&gt;&lt;P&gt;Do you think there is a way in this efficient code that I can know for each coefficient his variable? &lt;/P&gt;&lt;P&gt;Thanks, &lt;/P&gt;&lt;P&gt;Orit&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 24 Apr 2014 11:16:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Solving-OLS-regression-after-cleaning-empty-columns/m-p/189209#M1919</guid>
      <dc:creator>oriti</dc:creator>
      <dc:date>2014-04-24T11:16:00Z</dc:date>
    </item>
    <item>
      <title>Re: Solving OLS regression after cleaning empty columns</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Solving-OLS-regression-after-cleaning-empty-columns/m-p/189210#M1920</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;When you compute ssq(psl), ssq(ptl), etc, you are including the first observation of x in the computation. That observation was deleted when you formed xnew.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I think you want to examine whether any values of xnew[##,] are zero, or alternately ssq(psl[idx]).&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 24 Apr 2014 13:46:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Solving-OLS-regression-after-cleaning-empty-columns/m-p/189210#M1920</guid>
      <dc:creator>Rick_SAS</dc:creator>
      <dc:date>2014-04-24T13:46:20Z</dc:date>
    </item>
    <item>
      <title>Re: Solving OLS regression after cleaning empty columns</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Solving-OLS-regression-after-cleaning-empty-columns/m-p/189211#M1921</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Yes, there is some bookkeeping that I left out that you would need to figure out.&amp;nbsp; Given that you are having lots of problems getting the code to run, I suggest that you ignore my suggestion and save the generalizations for another day.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 24 Apr 2014 13:48:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Solving-OLS-regression-after-cleaning-empty-columns/m-p/189211#M1921</guid>
      <dc:creator>Rick_SAS</dc:creator>
      <dc:date>2014-04-24T13:48:37Z</dc:date>
    </item>
    <item>
      <title>Re: Solving OLS regression after cleaning empty columns</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Solving-OLS-regression-after-cleaning-empty-columns/m-p/189212#M1922</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear Rick,&lt;/P&gt;&lt;P&gt;Thank you for your great tips!&lt;/P&gt;&lt;P&gt;Given I have both of your books, maybe there are pages that you recommend me to read about the generalizations&amp;nbsp; ..?&lt;/P&gt;&lt;P&gt;Have a great day,&lt;/P&gt;&lt;P&gt;Orit&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 24 Apr 2014 15:21:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Solving-OLS-regression-after-cleaning-empty-columns/m-p/189212#M1922</guid>
      <dc:creator>oriti</dc:creator>
      <dc:date>2014-04-24T15:21:38Z</dc:date>
    </item>
    <item>
      <title>Re: Solving OLS regression after cleaning empty columns</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Solving-OLS-regression-after-cleaning-empty-columns/m-p/189213#M1923</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;When you exclude a column, what value do you assign to the coefficient? Zero? One? Missing?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If a variable has the constant value 0, the corresponding regression coefficient can have any arbitrary value. I guess setting the coefficient to 'missing' makes the most sense? &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 24 Apr 2014 15:45:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Solving-OLS-regression-after-cleaning-empty-columns/m-p/189213#M1923</guid>
      <dc:creator>Rick_SAS</dc:creator>
      <dc:date>2014-04-24T15:45:33Z</dc:date>
    </item>
    <item>
      <title>Re: Solving OLS regression after cleaning empty columns</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Solving-OLS-regression-after-cleaning-empty-columns/m-p/189214#M1924</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear Rick,&lt;/P&gt;&lt;P&gt;Yes you right. When the variable is a column of zero the coefficient should be missing.&lt;/P&gt;&lt;P&gt;The matrix of the coefficients should be something like:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bo&amp;nbsp;&amp;nbsp; b1&amp;nbsp;&amp;nbsp; b2&amp;nbsp;&amp;nbsp; b3&amp;nbsp;&amp;nbsp; b4&amp;nbsp;&amp;nbsp; b5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b6&lt;/P&gt;&lt;P&gt;sim1&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.5&amp;nbsp; 0.2&amp;nbsp; 0.3&amp;nbsp; .&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.8&amp;nbsp; 0.9&amp;nbsp; 0.05&lt;/P&gt;&lt;P&gt;sim2&amp;nbsp;&amp;nbsp; 0.5&amp;nbsp; 0.2&amp;nbsp; 0.3&amp;nbsp; 0.8&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.8&amp;nbsp; .&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.05&lt;/P&gt;&lt;P&gt;sim3&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.5&amp;nbsp; 0.2&amp;nbsp; 0.3&amp;nbsp; .&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.8&amp;nbsp; 0.9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .&lt;/P&gt;&lt;P&gt;sim4&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.5&amp;nbsp; 0.2&amp;nbsp; 0.3 0.7&amp;nbsp;&amp;nbsp; 0.8&amp;nbsp; 0.9&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.33&lt;/P&gt;&lt;P&gt;etc..&lt;/P&gt;&lt;P&gt;I would really appreciate your opinion.&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Orit&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 24 Apr 2014 18:11:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Solving-OLS-regression-after-cleaning-empty-columns/m-p/189214#M1924</guid>
      <dc:creator>oriti</dc:creator>
      <dc:date>2014-04-24T18:11:21Z</dc:date>
    </item>
    <item>
      <title>Re: Solving OLS regression after cleaning empty columns</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Solving-OLS-regression-after-cleaning-empty-columns/m-p/189215#M1925</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Here's an example of how I'd solve the problem without using any determinants or IF-THEN statements.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc iml;&lt;BR /&gt;x = randnormal(100, j(1,6,0), I(6));&lt;BR /&gt;y = randnormal(100, 0, 1);&lt;BR /&gt;x[,3]=0; x[,6]=0;&amp;nbsp; /* set some columns to exact 0 */&lt;/P&gt;&lt;P&gt;xpx = x`*x;&amp;nbsp; /* normal equations */&lt;BR /&gt;xpy = x`*y;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* Option 1: Use generalized inverse to solve (possibly singular) normal equations */&lt;BR /&gt;beta = ginv(xpx)* xpy;&lt;BR /&gt;print beta;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* Option 2: delete columns of xpx that are exactly zero. &lt;BR /&gt;&amp;nbsp;&amp;nbsp; Set coeffs of deleted columns to missing */&lt;BR /&gt;beta = j(nrow(xpx), 1, .);&amp;nbsp; /* or you can initialize beta to zero */&lt;BR /&gt;dropVars = loc( xpx[##,]=0 );&lt;BR /&gt;keepVars = setdif(1:ncol(xpx), dropVars);&lt;BR /&gt;beta[keepVars] = solve(xpx[keepVars,keepVars], xpy[keepVars]);&lt;BR /&gt;print beta;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 24 Apr 2014 18:11:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Solving-OLS-regression-after-cleaning-empty-columns/m-p/189215#M1925</guid>
      <dc:creator>Rick_SAS</dc:creator>
      <dc:date>2014-04-24T18:11:54Z</dc:date>
    </item>
    <item>
      <title>Re: Solving OLS regression after cleaning empty columns</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Solving-OLS-regression-after-cleaning-empty-columns/m-p/189216#M1926</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN class="word"&gt;Brilliant !!&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="word"&gt;Thanks so much,&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="word"&gt;Orit&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 25 Apr 2014 12:37:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Solving-OLS-regression-after-cleaning-empty-columns/m-p/189216#M1926</guid>
      <dc:creator>oriti</dc:creator>
      <dc:date>2014-04-25T12:37:14Z</dc:date>
    </item>
  </channel>
</rss>

