<?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 Splitting dataset based on total observations in Statistical Procedures</title>
    <link>https://communities.sas.com/t5/Statistical-Procedures/Splitting-dataset-based-on-total-observations/m-p/104460#M5514</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;are Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am struggling with spilitting my dataset into two based on number of observations.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have a dataset whose total number of observations can change on pulling out data every month from an access database. The SAS ultimately outputs data to excel file for creating map.&lt;/P&gt;&lt;P&gt;The problem is, I want to split my data into two if my total number of observations is greater than 100.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For eg: something like If No. of observations &amp;gt;=100 then split dataset and make two sets of 50 observation each. OR if no. of observaitons &amp;lt;100 then do nothing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Can anyone help me with this? I would really appreciate your time.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 04 May 2012 16:52:16 GMT</pubDate>
    <dc:creator>Nupur20</dc:creator>
    <dc:date>2012-05-04T16:52:16Z</dc:date>
    <item>
      <title>Splitting dataset based on total observations</title>
      <link>https://communities.sas.com/t5/Statistical-Procedures/Splitting-dataset-based-on-total-observations/m-p/104460#M5514</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;are Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am struggling with spilitting my dataset into two based on number of observations.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have a dataset whose total number of observations can change on pulling out data every month from an access database. The SAS ultimately outputs data to excel file for creating map.&lt;/P&gt;&lt;P&gt;The problem is, I want to split my data into two if my total number of observations is greater than 100.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For eg: something like If No. of observations &amp;gt;=100 then split dataset and make two sets of 50 observation each. OR if no. of observaitons &amp;lt;100 then do nothing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Can anyone help me with this? I would really appreciate your time.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 04 May 2012 16:52:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Statistical-Procedures/Splitting-dataset-based-on-total-observations/m-p/104460#M5514</guid>
      <dc:creator>Nupur20</dc:creator>
      <dc:date>2012-05-04T16:52:16Z</dc:date>
    </item>
    <item>
      <title>Re: Splitting dataset based on total observations</title>
      <link>https://communities.sas.com/t5/Statistical-Procedures/Splitting-dataset-based-on-total-observations/m-p/104461#M5515</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Is this what you&amp;nbsp; want.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data one;&lt;/P&gt;&lt;P&gt;do i=1 to 200;&lt;/P&gt;&lt;P&gt;output;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want want1 nothing;&lt;/P&gt;&lt;P&gt;set one;&lt;/P&gt;&lt;P&gt;if _n_&amp;gt;100 and _n_&amp;lt;150 then output want;&lt;/P&gt;&lt;P&gt;else if _n_&amp;gt;150 then output want1;&lt;/P&gt;&lt;P&gt;else if _n_&amp;lt;100 then output nothing;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Shiva&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 04 May 2012 16:59:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Statistical-Procedures/Splitting-dataset-based-on-total-observations/m-p/104461#M5515</guid>
      <dc:creator>shivas</dc:creator>
      <dc:date>2012-05-04T16:59:33Z</dc:date>
    </item>
    <item>
      <title>Re: Splitting dataset based on total observations</title>
      <link>https://communities.sas.com/t5/Statistical-Procedures/Splitting-dataset-based-on-total-observations/m-p/104462#M5516</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Not sure about the efficiency benchmark, but here is another data step approach:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want want1 nothing;&lt;/P&gt;&lt;P&gt;set one (firstobs=100 obs=150 in=want)&lt;/P&gt;&lt;P&gt;&amp;nbsp; one (firstobs=151 in=want1)&lt;/P&gt;&lt;P&gt;one (obs=99 in=nothing);&lt;/P&gt;&lt;P&gt;if want then output want;&lt;/P&gt;&lt;P&gt;else if want1 then output want1;&lt;/P&gt;&lt;P&gt;else if nothing then output nothing;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Haikuo&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 04 May 2012 17:36:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Statistical-Procedures/Splitting-dataset-based-on-total-observations/m-p/104462#M5516</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2012-05-04T17:36:26Z</dc:date>
    </item>
    <item>
      <title>Re: Splitting dataset based on total observations</title>
      <link>https://communities.sas.com/t5/Statistical-Procedures/Splitting-dataset-based-on-total-observations/m-p/104463#M5517</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;or&lt;/P&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; do i=1 to 110;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; data want1 want2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set have nobs=nobs;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if nobs&amp;gt;100 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if mod(_n_,2)=0 then output want1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else output want2;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; else stop;&lt;/P&gt;&lt;P&gt;&amp;nbsp; run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 05 May 2012 00:34:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Statistical-Procedures/Splitting-dataset-based-on-total-observations/m-p/104463#M5517</guid>
      <dc:creator>Linlin</dc:creator>
      <dc:date>2012-05-05T00:34:07Z</dc:date>
    </item>
    <item>
      <title>Re: Splitting dataset based on total observations</title>
      <link>https://communities.sas.com/t5/Statistical-Procedures/Splitting-dataset-based-on-total-observations/m-p/104464#M5518</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;hi ... here's another idea that varies the number of data sets produced (d1, d2, etc.) by size of the original data set ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;* make some data (try some different sizes);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;data one;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;do i=1 to 420;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;output;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;end;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;run;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;* if more than 100 obs, divide into data sets;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;filename x temp;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;data _null_;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;file x;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;set one nobs=obs;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;if obs le 100 then stop;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;put 'data';&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;x = ceil(obs/50);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;do j=1 to ceil(obs/50);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;&amp;nbsp; put 'd' j;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;end;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;put '; set one; select;';&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;do j=1 to ceil(obs/50) - 1;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;&amp;nbsp; k = j * 50;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;&amp;nbsp; put 'when (_n_ le ' k ') output d' j&amp;nbsp; ';';&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;end;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;put 'otherwise output d' j '; end; run;';&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;stop;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;run;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;%include x / source2;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;filename x;&lt;/STRONG&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 05 May 2012 14:02:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Statistical-Procedures/Splitting-dataset-based-on-total-observations/m-p/104464#M5518</guid>
      <dc:creator>MikeZdeb</dc:creator>
      <dc:date>2012-05-05T14:02:47Z</dc:date>
    </item>
    <item>
      <title>Re: Splitting dataset based on total observations</title>
      <link>https://communities.sas.com/t5/Statistical-Procedures/Splitting-dataset-based-on-total-observations/m-p/104465#M5519</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I kind of liked Linlin's approach, but I would wrap it in a macro.&amp;nbsp; E.g.:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; do i=1 to 102;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%macro split(dsn);&lt;/P&gt;&lt;P&gt;&amp;nbsp; proc sql noprint;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select count(*) into :nobs&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from &amp;amp;dsn.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; %if &amp;amp;nobs. gt 100 %then %do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data &amp;amp;dsn.1 &amp;amp;dsn.2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set &amp;amp;dsn.;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if mod(_n_,2)=0 then output &amp;amp;dsn.1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else output &amp;amp;dsn.2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;&amp;nbsp; %end;&lt;/P&gt;&lt;P&gt;%mend split;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%split(have)&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 05 May 2012 20:35:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Statistical-Procedures/Splitting-dataset-based-on-total-observations/m-p/104465#M5519</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2012-05-05T20:35:21Z</dc:date>
    </item>
    <item>
      <title>Re: Splitting dataset based on total observations</title>
      <link>https://communities.sas.com/t5/Statistical-Procedures/Splitting-dataset-based-on-total-observations/m-p/104466#M5520</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Another variation version of Art's code.&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;PRE&gt;data have;
&amp;nbsp;&amp;nbsp; do i=1 to 102;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;
&amp;nbsp;&amp;nbsp; end;
run;

 

%macro split(dsn);
%let dsid=%sysfunc(open(&amp;amp;dsn));
%let nobs=%sysfunc(attrn(&amp;amp;dsid,nobs));
%let dsid=%sysfunc(close(&amp;amp;dsid));
%let half=%sysevalf(&amp;amp;nobs/2,integer);
&amp;nbsp; %if &amp;amp;nobs. gt 100 %then %do;
&amp;nbsp;&amp;nbsp;&amp;nbsp; data &amp;amp;dsn.1 &amp;amp;dsn.2;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set &amp;amp;dsn.;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if _n_ le &amp;amp;half then output &amp;amp;dsn.1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else output &amp;amp;dsn.2;
&amp;nbsp;&amp;nbsp;&amp;nbsp; run;
&amp;nbsp; %end;
%mend split;

 

%split(have)

&lt;/PRE&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;Ksharp&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 07 May 2012 08:06:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Statistical-Procedures/Splitting-dataset-based-on-total-observations/m-p/104466#M5520</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2012-05-07T08:06:16Z</dc:date>
    </item>
  </channel>
</rss>

