<?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: sas dates in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/sas-dates/m-p/588965#M168383</link>
    <description>&lt;P&gt;Sorry that I didn't say.&lt;/P&gt;
&lt;P&gt;1712 is Dec 2017&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Mon, 16 Sep 2019 08:57:53 GMT</pubDate>
    <dc:creator>Ronein</dc:creator>
    <dc:date>2019-09-16T08:57:53Z</dc:date>
    <item>
      <title>sas dates</title>
      <link>https://communities.sas.com/t5/SAS-Programming/sas-dates/m-p/588956#M168378</link>
      <description>&lt;P&gt;Hello&lt;/P&gt;
&lt;P&gt;In this example mon=1712 and I want to create automatic sas macro that get value of 1 month before&amp;nbsp; 1712 ( 1711).&lt;/P&gt;
&lt;P&gt;I get value&amp;nbsp;1681 for macro var&amp;nbsp;&lt;CODE class=" language-sas"&gt;mon_minus1.&lt;/CODE&gt;&lt;/P&gt;
&lt;P&gt;&lt;CODE class=" language-sas"&gt;What is the way to get value 1711???&lt;/CODE&gt;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let mon=1712;
%let mon_minus1=%sysfunc(intnx(month,&amp;amp;mon.,-1,s));
%put &amp;amp;mon_minus1.;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 16 Sep 2019 08:09:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/sas-dates/m-p/588956#M168378</guid>
      <dc:creator>Ronein</dc:creator>
      <dc:date>2019-09-16T08:09:01Z</dc:date>
    </item>
    <item>
      <title>Re: sas dates</title>
      <link>https://communities.sas.com/t5/SAS-Programming/sas-dates/m-p/588957#M168379</link>
      <description>&lt;P&gt;is&amp;nbsp;&lt;SPAN&gt;1712&amp;nbsp;the actual numeric value of mon? Or is it a formated date value?&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data _null_;
    mon=1712;
    mon_minus1=input(put(intnx('month', input(put(mon, $4.), yymmn4.), -1, 'b'), yymmn4.), 4.);
    call symputx('mon_minus1', mon_minus1);
run;

%put &amp;amp;mon_minus1.;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 16 Sep 2019 08:22:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/sas-dates/m-p/588957#M168379</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2019-09-16T08:22:01Z</dc:date>
    </item>
    <item>
      <title>Re: sas dates</title>
      <link>https://communities.sas.com/t5/SAS-Programming/sas-dates/m-p/588958#M168380</link>
      <description>&lt;P&gt;1) What date is 1712 ? is it DEC 2017 ? or just a sequence number?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;2) For sequence number use code:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let prev = %eval(&amp;amp;mon -1);
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;3) Function INTNX requires a sas date. In case 1712 is DEC 2017 use next code:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data _null_;
   date_in = input("20&amp;amp;mon.01", yymmdd8.);
   date_out = intnx('month', date_in, -1); /* default day is 01 */ 
   call symput('mon_minus1', strip(date_out));
run;&lt;BR /&gt;%put&amp;nbsp;&amp;amp;mon_minus1;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 16 Sep 2019 08:25:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/sas-dates/m-p/588958#M168380</guid>
      <dc:creator>Shmuel</dc:creator>
      <dc:date>2019-09-16T08:25:35Z</dc:date>
    </item>
    <item>
      <title>Re: sas dates</title>
      <link>https://communities.sas.com/t5/SAS-Programming/sas-dates/m-p/588959#M168381</link>
      <description>&lt;P&gt;It is great but I want to learn how to do it with open code %let&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Also in your code there is a warning&lt;/P&gt;
&lt;P&gt;WARNING: Variable mon has already been defined as numeric.&lt;/P&gt;</description>
      <pubDate>Mon, 16 Sep 2019 08:30:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/sas-dates/m-p/588959#M168381</guid>
      <dc:creator>Ronein</dc:creator>
      <dc:date>2019-09-16T08:30:15Z</dc:date>
    </item>
    <item>
      <title>Re: sas dates</title>
      <link>https://communities.sas.com/t5/SAS-Programming/sas-dates/m-p/588964#M168382</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/159549"&gt;@Ronein&lt;/a&gt;&amp;nbsp;wrote "&lt;SPAN&gt;I want to learn how to do it with open code %let" then&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;the code&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data _null_;
   date_in = input("20&amp;amp;mon.01", yymmdd8.);
   date_out = intnx('month', date_in, -1); /* default day is 01 */ 
   call symput('mon_minus1', strip(date_out));
run;
%put &amp;amp;mon_minus1;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN&gt;can be written as:&lt;/SPAN&gt;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let mon = 1702;   /* macro variable is always a charcter string */
%let date_num = %sysfunc(input("20&amp;amp;mon.01", yymmdd8.));
%let date_out = %sysfunc(intnx(month,&amp;amp;date_num, -1));&lt;BR /&gt;%let mon_minus1 = %substr(%sysfunc(put(date_out,yymmdd8.)), 3,4);
%put &amp;amp;mon_minus1;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 16 Sep 2019 08:53:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/sas-dates/m-p/588964#M168382</guid>
      <dc:creator>Shmuel</dc:creator>
      <dc:date>2019-09-16T08:53:50Z</dc:date>
    </item>
    <item>
      <title>Re: sas dates</title>
      <link>https://communities.sas.com/t5/SAS-Programming/sas-dates/m-p/588965#M168383</link>
      <description>&lt;P&gt;Sorry that I didn't say.&lt;/P&gt;
&lt;P&gt;1712 is Dec 2017&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 16 Sep 2019 08:57:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/sas-dates/m-p/588965#M168383</guid>
      <dc:creator>Ronein</dc:creator>
      <dc:date>2019-09-16T08:57:53Z</dc:date>
    </item>
    <item>
      <title>Re: sas dates</title>
      <link>https://communities.sas.com/t5/SAS-Programming/sas-dates/m-p/588967#M168384</link>
      <description>&lt;P&gt;I know how to do it within a data step(Way1 is clear for me but I don't know how to do it in way2)&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let mon=1712;/*YYMM*/

/*Way1*/
data _NULL_;
   date_in = input("&amp;amp;mon.", yymmn4.);/*SAS date*/
   date_out = intnx('month', date_in, -1); /* default day is 01 */ 
   date_out_b=put(date_out,yymmn4.);
   call symput('mon_minus1_a', strip(date_out));
   call symput('mon_minus1_b', strip(date_out_b));
run;
%put &amp;amp;mon_minus1_a;/*21124*/
%put &amp;amp;mon_minus1_b;/*1711*/

/*Way2*/
%let mon_minus1_a=%sysfunc(inputn(&amp;amp;mon. ,yymmn4.));/*SAS date*/
%put &amp;amp;mon_minus1_a.;/*21154*/&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 16 Sep 2019 09:12:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/sas-dates/m-p/588967#M168384</guid>
      <dc:creator>Ronein</dc:creator>
      <dc:date>2019-09-16T09:12:27Z</dc:date>
    </item>
    <item>
      <title>Re: sas dates</title>
      <link>https://communities.sas.com/t5/SAS-Programming/sas-dates/m-p/588974#M168386</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/159549"&gt;@Ronein&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here some spaghetti for you:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;options yearcutoff=1926;
%let have=1712;
%let want=%sysfunc(intnx(month,%sysfunc(inputn(1712,yymmn4.)),-1),yymmn4.);
%put &amp;amp;=want;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;CODE class=" language-sas"&gt;&lt;/CODE&gt;&lt;/P&gt;
&lt;PRE&gt;WANT=1711&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 16 Sep 2019 09:58:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/sas-dates/m-p/588974#M168386</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2019-09-16T09:58:39Z</dc:date>
    </item>
    <item>
      <title>Re: sas dates</title>
      <link>https://communities.sas.com/t5/SAS-Programming/sas-dates/m-p/588975#M168387</link>
      <description>&lt;P&gt;Have you tried the code:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let mon = 1712;   /* macro variable is always a charcter string */
%let date_num = %sysfunc(input("20&amp;amp;mon.01", yymmdd8.));
%let date_out = %sysfunc(intnx(month,&amp;amp;date_num, -1));
%let mon_minus1 = %substr(%sysfunc(put(date_out,yymmdd8.)), 3,4);
%put &amp;amp;mon_minus1;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Sometimes it is easier to split the code into several rows than write it as one complicated statement.&lt;/P&gt;
&lt;P&gt;Check each step and be sure you understand it.&lt;/P&gt;</description>
      <pubDate>Mon, 16 Sep 2019 09:39:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/sas-dates/m-p/588975#M168387</guid>
      <dc:creator>Shmuel</dc:creator>
      <dc:date>2019-09-16T09:39:25Z</dc:date>
    </item>
    <item>
      <title>Re: sas dates</title>
      <link>https://communities.sas.com/t5/SAS-Programming/sas-dates/m-p/589027#M168404</link>
      <description>&lt;P&gt;How I yearn for the days when life was simple:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let mon_minus1 = %eval(&amp;amp;mon - 1);
%if %substr(&amp;amp;mon_minus1, 3) = 00 %then %let mon_minus1 = %eval(&amp;amp;mon_minus1 - 88);&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;If you are working with a slightly older version of SAS that doesn't support %IF %THEN in open code, you could smoosh all the logic together:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let mon_minus1 = %eval(&amp;amp;mon - 1 - 88 * (%substr(&amp;amp;mon, 3)=01) ) ;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 16 Sep 2019 12:56:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/sas-dates/m-p/589027#M168404</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2019-09-16T12:56:24Z</dc:date>
    </item>
  </channel>
</rss>

