I need some code examples. I am trying to pass the values of a couple of X commands to variables and then use the two values in a if-then/do. I've provided some pseudo code to help explain what I'm trying to accomplish. Thanks.
x 'cd /home/unix/dir/one';
x 'ls -1 | wc -l';
x 'cd /home/unix/dir/two';
x 'ls -1 | wc -l';
if results of first piped command = results of second piped command
then do;
x 'sas runsasprog.sas';
end;
else send email;
Look in the documentation for FILENAME PIPE and examples to create data sets of the results. Then compare the contents of the datasets. Since I am not sure what you might be considering for "equality" between the output of the commands since creation and or modification datetimes are very likely to be different I am not going to attempt the comparison.
The command 'ls -1 | wc -l' returns the number of files in a given directory. It will simply return a number without timestamps or anything like that. The object is to compare the number/count of files of one directory to another.
Don't use X command. Use PIPE engine instead.
So read the two numbers into two variables and compare number.
You could for example put the result into a macro variable that you could use to drive what to do next.
data _null_;
infile
'cd /home/unix/dir/one
;ls -1 | wc -l
;cd /home/unix/dir/two
;ls -1 | wc -l
' pipe truncover;
input x y ;
call symputx('match',x=y);
run;
I would not use an X command or pipe for that. SAS has very good functions for directories. One possibility is to use them in to create a macro function:
%macro dnum(path);
%local fileref rc did memcount;
/* Fileref is empty, so we assign a temporary, unique fileref */
%let rc=%sysfunc(filename(fileref, &path));
%let did=%sysfunc(dopen(&fileref));
%let memcount=%sysfunc(dnum(&did));
/* Close directory handle */
%let rc=%sysfunc(dclose(&did));
/* deassign fileref */
%let fileref=%sysfunc(filename(fileref));
&memcount
%mend;
Then you can just use that macro function to get the number of entries in each directory, like
data _null_;
file outbox <email options>; /* this is the email fileref */
if %dnum(/home/unix/dir/one)=%dnum(/home/unix/dir/two) then do;
call system('sas runsasprog.sas');
put '!EM_ABORT!'; /* Don't send no email */
end;
else … /* write something in the email message */
Build your skills. Make connections. Enjoy creative freedom. Maybe change the world. Registration is now open through August 30th. Visit the SAS Hackathon homepage.
Register today!Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Select SAS Training centers are offering in-person courses. View upcoming courses for: