BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
boubou31
Calcite | Level 5

Hey genius,
So i'm struggling here with several problem. I calculate the time of an proc to run, and now i want to write down my result in a file. But i'm already stuck with the fact of putting this variable in a DATA set. I thougn at the beginning it was cause my data was too long, so i try to apply a round, but it's look like the code ignore it. So at the end of this programm, i'm just having an empty table.
I hope i've been clear, and thanks you for your help !

1    %studio_hide_wrapper;
82   /* Generated Code (IMPORT) */
83   /* Source File: integ_narr_1_norm_tiny_1.txt */
84   /* Source Path: /Users/olivier.perruchet@gmail.com/Zebrys/integ_narr_1_norm_tiny_1.txt */
85   /* Code generated on: May 5, 2020, 4:02:18 PM */
86   proc sql;
87   %if %sysfunc(exist(WORK.IMPORT5)) %then %do;
88   drop table WORK.IMPORT5;
NOTE: Table WORK.IMPORT5 has been dropped.
89   %end;
90   %if %sysfunc(exist(WORK.IMPORT5, VIEW)) %then %do;
91   drop view WORK.IMPORT5;
92   %end;
93   quit;
NOTE: PROCEDURE SQL used (Total process time):
      real time           0.00 seconds
      cpu time            0.01 seconds
      
94   
95   FILENAME REFFILE FILESRVC
96   FOLDERPATH='/Users/olivier.perruchet@gmail.com/Zebrys'
97   FILENAME='integ_narr_1_norm_tiny_1.txt';
98   
99   PROC IMPORT DATAFILE=REFFILE DBMS=CSV OUT=WORK.IMPORT5;
100  GETNAMES=no;
101  DATAROW=1;
102  RUN;
NOTE: Unable to open parameter catalog: SASUSER.PARMS.PARMS.SLIST in update mode. Temporary parameter values will be saved to 
WORK.PARMS.PARMS.SLIST.
103   /**********************************************************************
104   *   PRODUCT:   SAS
105   *   VERSION:   V.03.05
106   *   CREATOR:   External File Interface
107   *   DATE:      07MAY20
108   *   DESC:      Generated SAS Datastep Code
109   *   TEMPLATE SOURCE:  (None Specified.)
110   ***********************************************************************/
111      data WORK.IMPORT5    ;
112      %let _EFIERR_ = 0; /* set the ERROR detection macro variable */
113      infile REFFILE delimiter = ',' MISSOVER DSD lrecl=32767 ;
114         informat VAR1 best32. ;
115         informat VAR2 best32. ;
116         informat VAR3 best32. ;
117         informat VAR4 best32. ;

497                  VAR127
498                  VAR128
499      ;
500      if _ERROR_ then call symputx('_EFIERR_',1);  /* set ERROR detection macro variable */
501      run;
NOTE: The infile REFFILE is:
      Filename=integ_narr_1_norm_tiny_1.txt,
      URI path=/files/files/75628334-7975-46f3-89e3-f518dbb310e9,
      File Identifier=75628334-7975-46f3-89e3-f518dbb310e9,
      Content Type=application/octet-stream,
      Parent URI=/folders/folders/e423dd04-15c5-4803-b06a-6e9e2a4412b3,
      RECFM=V,LRECL=32767,File Size (bytes)=65536,
      Last Modified=05May2020:08:16:41,
      Create Time=05May2020:08:16:41
NOTE: 256 records were read from the infile REFFILE.
      The minimum record length was 255.
      The maximum record length was 255.
NOTE: The data set WORK.IMPORT5 has 256 observations and 128 variables.
NOTE: DATA statement used (Total process time):
      real time           0.09 seconds
      cpu time            0.03 seconds
      
256 rows created in WORK.IMPORT5 from REFFILE.
  
  
  
NOTE: WORK.IMPORT5 data set was successfully created.
NOTE: The data set WORK.IMPORT5 has 256 observations and 128 variables.
NOTE: PROCEDURE IMPORT used (Total process time):
      real time           0.35 seconds
      cpu time            0.15 seconds
      
502  
503  PROC CONTENTS DATA=WORK.IMPORT5;
504  RUN;
NOTE: PROCEDURE CONTENTS used (Total process time):
      real time           0.11 seconds
      cpu time            0.16 seconds
      
NOTE: The PROCEDURE CONTENTS printed pages 171-174.
505  
506  
507  
508  
509  %let temps_debut_mean = %sysfunc(time());
510  
511  proc means data=work.import5 mean;
512  run;
NOTE: There were 256 observations read from the data set WORK.IMPORT5.
NOTE: The PROCEDURE MEANS printed pages 175-177.
NOTE: PROCEDURE MEANS used (Total process time):
      real time           0.10 seconds
      cpu time            0.12 seconds
      
513  
514  %let temps_fin_mean = %sysfunc(time());
515  %let temps_debut_median = %sysfunc(time());
516  
517  proc means data=work.import5 median;
518  run;
NOTE: There were 256 observations read from the data set WORK.IMPORT5.
NOTE: The PROCEDURE MEANS printed pages 178-180.
NOTE: PROCEDURE MEANS used (Total process time):
      real time           0.12 seconds
      cpu time            0.13 seconds
      
519  
520  %let temps_fin_median = %sysfunc(time());
521  %let duree_mean = round( %sysevalf(&temps_fin_mean.-&temps_debut_mean.),0.001);
522  %put Durée d’exécution moyenne : &duree_mean.;
Durée d’exécution moyenne : round( 0.10415411000576,0.001)
523  %let duree_median = round( %sysevalf(&temps_fin_median.-&temps_debut_median.),0.001);
524  %put Durée d’exécution medianne : &duree_median.;
Durée d’exécution medianne : round( 0.125685930303,0.001)
525  
526  /* DATA resultat; */
527  /* input datatype kind tailleMatrice reroll distrib drange operation implementation time; */
528  /* run; */
529  Data resultat;
530  input time;
531  datalines;
NOTE: Invalid data for time in line 532 1-11.
RULE:----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0                           
532  &duree_mean
time=. _ERROR_=1 _N_=1
NOTE: Invalid data for time in line 533 1-13.
RULE:----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0                           
533  &duree_median
time=. _ERROR_=1 _N_=2
NOTE: The data set WORK.RESULTAT has 2 observations and 1 variables.
NOTE: DATA statement used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds
      
534  ;
535  run;
536  
537  
538  
539  
540  
541  %studio_hide_wrapper;
proc sql;
	%if %sysfunc(exist(WORK.IMPORT5)) %then %do;
	drop table WORK.IMPORT5;
	%end;
	%if %sysfunc(exist(WORK.IMPORT5, VIEW)) %then %do;
	drop view WORK.IMPORT5;
	%end;
quit;

FILENAME REFFILE FILESRVC 
	FOLDERPATH='/Users/olivier.perruchet@gmail.com/Zebrys' 
	FILENAME='integ_narr_1_norm_tiny_1.txt';

PROC IMPORT DATAFILE=REFFILE DBMS=CSV OUT=WORK.IMPORT5;
	GETNAMES=no;
	DATAROW=1;
RUN;

PROC CONTENTS DATA=WORK.IMPORT5;
RUN;




%let temps_debut_mean = %sysfunc(time());

proc means data=work.import5 mean;
run;

%let temps_fin_mean = %sysfunc(time());
%let temps_debut_median = %sysfunc(time());

proc means data=work.import5 median;
run;

%let temps_fin_median = %sysfunc(time());
%let duree_mean = round( %sysevalf(&temps_fin_mean.-&temps_debut_mean.),0.001);
%put Durée d’exécution moyenne : &duree_mean.;
%let duree_median = round( %sysevalf(&temps_fin_median.-&temps_debut_median.),0.001);
%put Durée d’exécution medianne : &duree_median.;

/* DATA resultat; */
/* input datatype kind tailleMatrice reroll distrib drange operation implementation time; */
/* run; */
Data resultat;
input time;
datalines;
&duree_mean
&duree_median
;
run;
1 ACCEPTED SOLUTION

Accepted Solutions
Kurt_Bremser
Super User

Mistake #1 (don't worry, it happened to everyone of us): you can't use macro language and datalines together; no macro triggers (&,%)in datalines, and no datalines in macro definitions.

Mistake #2: using the data step function ROUND in a %let without wrapping it in %sysfunc.

Mistake #3: making your life unnecessarily complicated by involving macro processing where it is not needed.

Do everything in the data step instead:

data resultat;
length step $10;
format duree time12.3;
step = "Mean";
duree = round(&temps_fin_mean. - &temps_debut_mean.,0.001);
ouput;
step = "Median";
duree = round(&temps_fin_median. - &temps_debut_median.,0.001);
output;
run;

View solution in original post

2 REPLIES 2
Kurt_Bremser
Super User

Mistake #1 (don't worry, it happened to everyone of us): you can't use macro language and datalines together; no macro triggers (&,%)in datalines, and no datalines in macro definitions.

Mistake #2: using the data step function ROUND in a %let without wrapping it in %sysfunc.

Mistake #3: making your life unnecessarily complicated by involving macro processing where it is not needed.

Do everything in the data step instead:

data resultat;
length step $10;
format duree time12.3;
step = "Mean";
duree = round(&temps_fin_mean. - &temps_debut_mean.,0.001);
ouput;
step = "Median";
duree = round(&temps_fin_median. - &temps_debut_median.,0.001);
output;
run;
boubou31
Calcite | Level 5
Thanks, a lot !
I will remember your lessons sensei

SAS Innovate 2025: Save the Date

 SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!

Save the date!

Mastering the WHERE Clause in PROC SQL

SAS' Charu Shankar shares her PROC SQL expertise by showing you how to master the WHERE clause using real winter weather data.

Find more tutorials on the SAS Users YouTube channel.

Discussion stats
  • 2 replies
  • 672 views
  • 0 likes
  • 2 in conversation