<?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 Automation - Export in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/SAS-Automation-Export/m-p/315209#M68709</link>
    <description>&lt;P&gt;You can use a proper macro variable in the outfile="" option of your proc export.&lt;/P&gt;</description>
    <pubDate>Tue, 29 Nov 2016 15:15:25 GMT</pubDate>
    <dc:creator>Kurt_Bremser</dc:creator>
    <dc:date>2016-11-29T15:15:25Z</dc:date>
    <item>
      <title>SAS Automation - Export</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SAS-Automation-Export/m-p/315194#M68701</link>
      <description>&lt;P&gt;I have an automated script that run daily that automatically grabs a .tsv log file from a dynamically named file/folder (based upon the date - MM.DD.YY) that automatically creates a png graph with a dynamic name as well also based upon the date (output is name_of_file_MM_DD)..&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I love it - works great...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;However, other projects want to see the raw data for the graph... Im trying to export this data as part of the automated process and running into some wall.. I can do it manually by exporting the "ALL" spreadsheet from "Output Data" manually without a problem but am running into a problem automating it..&amp;nbsp; Ultimately, I would like to do BOTH the graph and the spreadsheet - but really need the spreadsheet...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here is code&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;******************************************************************;             
 
options obs=10000000;
data _null_;
xx = date();
*yy = dhms(intnx('day',xx,-1),0,0,0);
*yy above is for one day previous ie -1 for midnight ;
yy = dhms(intnx('day',xx, 0),9,0,0);
* Today's date DHMS is day hour minutes seconds;
*zz = dhms(xx,3,0,0);
*zz above is for 3 am changing the 3 to 0 changes it to 12am of today's data;
zz = dhms(xx,21,0,0);
length
  this_day this_month this_year $2
  this_year4 $4
  myfilename $100
;
this_day = put(day(xx),z2.);
this_month = put(month(xx),z2.);
this_year4 = put(year(xx),z4.);
this_year = substr(this_year4,3);
myfilename = 'C:\Prod Ack Gen Time Data\PETE\' !! this_year4 !!'\GZ\' !! put(xx,mmddyyp8.) !! '\core_fed_ack_gen_data' !! this_month !! '_' !! this_day !! '.tsv';
myoutputnm = 'C:\Prod Ack Gen Time Data\PETE\' !! this_year4 !!'\rpt\' !! put(xx,mmddyyp8.) !! '\core_fed_ack_gen_data' !! this_month !! '_' !! this_day !! '.png';
call symput('filepath',strip(myfilename));
call symput('filesout',strip(myoutputnm));
call symput('begdt',"'"!!put(yy,datetime18.1)!!"'dt");
call symput('enddt',"'"!!put(zz,datetime18.1)!!"'dt");
/*
%let begdt = '23Feb16 00:00:00.0'dt ;
%let enddt = '24Feb16 03:00:00.0'dt ;
*/
/*
%let sync_int = 600;
%let ginterval='01:00:00.0't ; 
*/
%let sync_int = 60;
%let ginterval='00:15:00.0't ; 

run ;
%put filepath=&amp;amp;filepath;
%put filesout=&amp;amp;filesout;
%put begdt=&amp;amp;begdt;
%put enddt=&amp;amp;enddt;

/*
filename filein (
   'c:\Users\XBWKB\My Documents\SE\ack\core_0325_00am_fed_data.tsv'
*/   

/*
filename filein (
/* 
   * Note sometimes the time parameter changes   
   'C:\Prod Ack Gen Time Data\2016\GZ\02.10.16\core_state_ack_gen_data02_10_031502.tsv' 
   'C:\Prod Ack Gen Time Data\2016\GZ\02.24.16\core_state_ack_gen_data02_24_031500.tsv'  
 );
*/
 
filename filein (
   "&amp;amp;filepath"
 );

/*
  'c:\Users\XBWKB\My Documents\SE\ack\core_0325_00am_fed_data.tsv'
  'c:\Users\XBWKB\My Documents\SE\ack\core_0325_6am_fed_data.tsv'
  'c:\Users\XBWKB\My Documents\SE\ack\core_0316_2days_fed_data.tsv'
  'c:\Users\XBWKB\My Documents\SE\ack\core_0316_2days_fed_data.tsv'
  'c:\Users\XBWKB\My Documents\SE\ack\core_0224_fed_data.tsv'
  'c:\Users\XBWKB\My Documents\SE\ack\core_0224_state_data.tsv'

1040    `A    `02/23/2015 19:45:28      `02/23/2015 19:45:49   

•	Four (4) columns of data as follows:
o	submission_type
o	Status (accepted/Rejected or RFP)
o	receipt time (as date/time)
o	ack time (as date/time)

 */

* ie. %sync(ttime,60) ==&amp;gt; '10:00:00't where ttime = '09:59:32't   ; 
%macro sync (                                                                   
             value   ,                                                          
             interval ) ;                                                       
                                                                                
   if mod(&amp;amp;value,&amp;amp;interval) &amp;gt;= &amp;amp;interval*.5 then                                 
      &amp;amp;value = &amp;amp;interval * int(&amp;amp;value/&amp;amp;interval) + &amp;amp;interval ;                  
   else                                                                         
      &amp;amp;value = &amp;amp;interval * int(&amp;amp;value/&amp;amp;interval) ;                              
                                                                                
%mend  sync ; 


data t (keep=int_dt date hour latency type status) ;

infile filein firstobs=1 missover dsd ;

length
   tstr
       $  100
   p1
   p4
   type
   status
       $  30   
;

input  tstr ;



format int_dt ack_dt datetime. ;

format rec_date ack_date date. ;
 
p1 = scan(tstr,3,"`") ;
p4 = scan(tstr,4,"`") ;
type = left(trim(scan(tstr,1,"`"))) ;
status = left(trim(scan(tstr,2,"`")));

 

  * if type =' ' ;
  * if status = ' ' ;
  
   Rec_Date = Input(scan(p1,1,' '),mmddyy10.) ;
   *Rec_Time = Input(scan(p1,2,' '),time5.) ;
   Rec_Time = Input(scan(p1,2,' '),time8.) ;

   Ack_Date = Input(scan(p4,1,' '),mmddyy10.) ;
   *Ack_Time = Input(scan(p4,2,' '),time5.) ;
   Ack_Time = Input(scan(p4,2,' '),time8.) ;


   if 
     Rec_Date = . or 
     Rec_Time = . or 

     Ack_Date = . or 
     Ack_Time = .  
   then do ;
     
     c+1 ;
     *put _all_ ;
	 delete ;
   end ;
 
   int_dt = dhms(Rec_Date, hour(Rec_Time), minute(Rec_Time), second(Rec_Time) ) ;

   ack_dt = dhms(Ack_Date, hour(Ack_Time), minute(Ack_Time), second(Ack_Time) ) ;

   *latency = (ack_dt - int_dt) / 3600 ;
   latency = (ack_dt - int_dt)  ;

   *if latency &amp;lt;= 75 ;   * Weed out outliers ;

   If latency = . or latency &amp;lt; 0 then do ;
      put 'howdy ' _all_ ;
	  delete ;
   End ;
   
   %sync(int_dt,&amp;amp;sync_int) ;

   date = datepart(int_dt) ;

   hour = hour(timepart(int_dt)) ;
   
   if int_dt &amp;gt;= &amp;amp;begdt and int_dt &amp;lt; &amp;amp;enddt ;
/*
   if int_dt &amp;gt;= '14apr15 18:40:00.0'dt and int_dt &amp;lt; '15apr15 00:10:00.0'dt then delete ;
*/

run ;

*proc print ;
run ;
  
proc sort ;
by date hour int_dt ;
run ;
*proc print ;
run ;

proc summary data=t ;
by date hour int_dt ;
var latency ;
output out=trec (DROP = _TYPE_ RENAME = (_FREQ_ = receipt_cnt))
       mean (latency) = latency_mean_seconds
	  
	   ;

run ;

*proc print ;
*Title 'Receipts and Latency by date hour interval' ;
*sum receipt_cnt ;
run ;

proc summary data=t ;
var latency ;
output out=trec_conf 
       mean (latency)   = latency_mean
       lclm (latency)   = latency_lclm
	   uclm (latency)   = latency_uclm
	   stddev (latency) = latency_stddev
	   p95    (latency) = latency_95th_percentile
	   ;

run ;
proc univariate data=t ;
Title1 'Analysis of Detail Data' ;
title2 ' ' ;
   var latency ;
run ;

proc print ;
Title1 'Confidence intervals of Detail Data' ;
title2 ' ' ;
run ;

proc summary data=trec ;
var latency_mean_seconds ;
output out=trec_conf
       mean (latency_mean_seconds)   = latency_mean
       lclm (latency_mean_seconds)   = latency_lclm
	   uclm (latency_mean_seconds)   = latency_uclm
	   stddev (latency_mean_seconds) = latency_stddev
	   p95    (latency_mean_seconds) = latency_95th_percentile   
	   
	   ;

run ;
proc univariate data=trec ;
Title1 "Analysis of &amp;amp;sync_int second sample means" ;
title2 ' ' ;
   var latency_mean_seconds ;
run ;

proc print ;
Title1 "Confidence intervals from &amp;amp;sync_int second sample means" ;
title2 ' ' ;
run ;

*Time	Receipts	IMF Acks	BMF Acks	FED Acks	State Acks	Total Acks	RFP	Total Acks + RFP ;
*02/17/2015 15:00	50	32	2	34	0	34	9	43 ;

data counts ;

*infile 'c:\Users\XBWKB\My Documents\SE\ack\Ack_48_hrs-2-17-15-marci.csv' dsd firstobs=2 missover ;
infile 'C:\Users\d7dmb\Documents\MeF\Prod Scripts\SAS\ack_rate_per_min_48hrs-2-22.csv' dsd firstobs=2 missover ;


drop 
   p1
 
   counts_time
   counts_time2

   c
;

length
   p1
             $ 16
   Receipts	
   IMF_Acks	
   BMF_Acks	
   FED_Acks	
   State_Acks	
   Total_Acks	
   RFP 
   Acks_RFP
               8
 ;

 input
   p1
   Receipts	
   IMF_Acks	
   BMF_Acks	
   FED_Acks	
   State_Acks	
   Total_Acks	
   RFP
   Acks_RFP
 ; 

   Receipts	  = Receipts   * 60;
   IMF_Acks	  = IMF_Acks   * 60;
   BMF_Acks	  = BMF_Acks   * 60;
   FED_Acks	  = FED_Acks   * 60;
   State_Acks =	State_Acks * 60;
   Total_Acks =	Total_Acks * 60;
   RFP        = RFP        * 60;
   Acks_RFP   = Acks_RFP   * 60;
 
 format int_dt datetime. ;

 format date date. ;

   counts_date = Input(scan(p1,1,' '),mmddyy10.) ;
   counts_time = Input(scan(p1,2,' '),time5.) ;

  
   if 
     counts_date = . or 
     counts_time = . 
   then do ;
     
     c+1 ;
     *put _all_ ;
	 delete ;
   end ;
 
   int_dt = dhms(counts_date, hour(counts_time), minute(counts_Time), second(counts_Time) ) ;
   %sync(int_dt,&amp;amp;sync_int) ;
   hour = hour(timepart(int_dt)) ;
   date = datepart(int_dt) ;

   if int_dt &amp;gt;= &amp;amp;begdt and int_dt &amp;lt; &amp;amp;enddt ;

run ;
*proc print ;
title1 'Initial reads of MeF counts from IBM' ;
run ;
proc sort data=counts;
by date hour int_dt ;
run ;
*proc print ;
run ;

proc summary data=counts ;
by date hour int_dt ;
var 
   Receipts	
   IMF_Acks	
   BMF_Acks	
   FED_Acks	
   State_Acks	
   Total_Acks	
   RFP 
   Acks_RFP
; 

output out=counts 
       sum= 
	  
	   ;

run ;

*proc print ;
*Title1 'Counts from IBM totaled date hour int_dt' ;
title2 ' ' ;

run ;

data all ;
   merge counts(in=incnt) trec(in=intrec);

   by date hour int_dt ;
run ;

data all ;

   c+1 ;
   if c=1 then do ;
      set trec_conf ;
	  retain 
	     latency_lclm
	     latency_uclm
		 latency_mean
		 latency_stddev
		 latency_stddev_2
		 latency_95th_percentile
	  ;
	  latency_uclm = latency_mean + latency_stddev * 2 ;
	  latency_lclm = latency_mean - latency_stddev * 2 ;

	  put _all_ ;
	 
	end ;

	set all ;

	drop c _type_ _freq_ ;
    
run ;
proc print ;
Title 'Final Print after merge' ;
sum 
   Receipts	
   IMF_Acks	
   BMF_Acks	
   FED_Acks	
   State_Acks	
   Total_Acks	
   RFP 
   Acks_RFP
   receipt_cnt
;
run ;
 /**/

*goptions colors=(black blue red);

*symbol1 interpol=spline line=2 width=2 value=triangle c=steelblue;  *line=2 dotted;

symbol1 interpol=join width=1 line=2 v=none color=red;
symbol2 interpol=join width=1 line=1 v=none color=black;
symbol3 interpol=join width=1 line=2 v=none color=red;
symbol4 interpol=join width=1 line=1 v=none color=blue;
symbol5 interpol=join width=1 line=1 v=none color=green;
*symbol4 interpol=join width=1 line=1 v=none color=green;

/*
symbol1 interpol=join width=1 v=none color=black;
symbol2 interpol=join width=1 v=none color=blue;
symbol3 interpol=join width=1 v=none color=red;
symbol4 interpol=join width=1 v=none color=green;
*/

run;
* THis is what creates the graph picture automatically;
*ods  _all_  close; 
ods listing; 
* filename grafout "C:\Prod Ack Gen Time Data\2016\GZ\02.24.16\Test.png"; 

filename grafout (
   "&amp;amp;filesout"
    );

goptions reset=goptions device=PNG gsfname=grafout;  
run;


    /*   haxis=&amp;amp;begdt to &amp;amp;enddt by &amp;amp;ginterval */
proc gplot data= all ;
   format int_dt datetime10. ;
   title1 "Submission Processing Control Chart" ;
   *title2 "Mean Latency, Receipts " ;
   title2 "Period: &amp;amp;begdt to &amp;amp;enddt" ;

   title3 "Data grouped in &amp;amp;sync_int Second Intervals" ;
   label int_dt = 'Date Time' ; 
   label latency_mean_seconds= 'latency' ;
  
   /* 
     Receipts	
     IMF_Acks	
     BMF_Acks	
     FED_Acks	
     State_Acks	
     Total_Acks	
     RFP 
     Acks_RFP
     receipt_cnt
     latency_mean_seconds

     legend2 order=('Rec' 'Total_Acks'); 
   */

   *legend1 order=('latency_lclm' 'latency_mean_seconds' 'latency_uclm');
   *legend1 order=('latency_mean_seconds' 'latency_95th_percentile');
   legend1 order=('latency' 'latency_lclm' 'latency_mean' 'latency_uclm');

   /*
   legend2 order=('Acks_RFP');
   */

   legend2 order=('receipt_cnt');

   axis1 label=(angle=90 'Latency in Seconds') ;
   *legend2 order=('Receipts');

   plot 
          
      /**/    latency_lclm*int_dt       /* */
	          latency_mean*int_dt 
              latency_uclm*int_dt  
		      latency_mean_seconds*int_dt

	/***	  latency_95th_percentile*int_dt ***/
	/**	  latency_uclm*int_dt        * */
		  
      

   / overlay name="tgraph" hminor=0 legend=legend1
                    haxis=&amp;amp;begdt to &amp;amp;enddt by &amp;amp;ginterval vaxis=axis1
                    
              
   ;

   /***
   plot2 Acks_RFP*int_dt 
                    / overlay name="tgraph" legend=legend2 ***/
   /***/
   plot2 receipt_cnt*int_dt 
                    / overlay name="tgraph" legend=legend2 /***/
           
               
   ;

   *by date ;
  
   run;

     /*
    plot2 Acks_RFP*int_dt Receipts*int_dt
   latency_lclm*receipt_dt
        latency_uclm*receipt_dt 
   plot latency_mean_seconds*receipt_dt / name="tgraph" hminor=0
                    haxis='18feb15:00:00:00'dt to '18feb15:23:59:00'dt by '01:00:00.0't 
                    vaxis=-25 to 40 by 5 ; 
   
   plot latency_lclm*receipt_dt / name="tgraph" hminor=0 
               
   
   plot latency_uclm*receipt_dt / name="tgraph" hminor=0 
                 
   ;
   *by date ;

   plot low*year high*year / overlay
                             haxis=axis1
                             hminor=4
                             vaxis=axis2
                             vminor=1
                             caxis=black
                             areas=2;
run;

     */&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 29 Nov 2016 14:49:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SAS-Automation-Export/m-p/315194#M68701</guid>
      <dc:creator>hondahawkrider</dc:creator>
      <dc:date>2016-11-29T14:49:42Z</dc:date>
    </item>
    <item>
      <title>Re: SAS Automation - Export</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SAS-Automation-Export/m-p/315204#M68704</link>
      <description>&lt;P&gt;It exports fine manually using&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc export

data=ALL

outfile="C:\temp\filename_ALL.csv"

dbms=csv

replace

;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;It's just I am trying to leverage the myfilename and myoutput name values in the same way I get the png..&lt;/P&gt;</description>
      <pubDate>Tue, 29 Nov 2016 15:06:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SAS-Automation-Export/m-p/315204#M68704</guid>
      <dc:creator>hondahawkrider</dc:creator>
      <dc:date>2016-11-29T15:06:48Z</dc:date>
    </item>
    <item>
      <title>Re: SAS Automation - Export</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SAS-Automation-Export/m-p/315209#M68709</link>
      <description>&lt;P&gt;You can use a proper macro variable in the outfile="" option of your proc export.&lt;/P&gt;</description>
      <pubDate>Tue, 29 Nov 2016 15:15:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SAS-Automation-Export/m-p/315209#M68709</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2016-11-29T15:15:25Z</dc:date>
    </item>
    <item>
      <title>Re: SAS Automation - Export</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SAS-Automation-Export/m-p/315211#M68710</link>
      <description>&lt;P&gt;Why not make the name of the output file in the same step you make your &amp;amp;Filepath as a macro variable? Call it OUTFILEPATH or similar. Just have the file extension match the desired export type.&lt;/P&gt;</description>
      <pubDate>Tue, 29 Nov 2016 15:17:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SAS-Automation-Export/m-p/315211#M68710</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2016-11-29T15:17:27Z</dc:date>
    </item>
  </channel>
</rss>

