Tuesday, November 25, 2014
SAS: Enterprise Guide AUTOEXEC
Wthin Enterprise Guide, if you name a Process Flow AUTOEXEC, EG will prompt you to run that process when you open the project. Note you need to name the Process, not the Program.
Saturday, November 22, 2014
Linux: Run a program every hour
Saw this here (http://linux.die.net/Linux-CLI/scheduling.html):
You can also use the -f option to have at execute a particular file (a shell script).
This would run the shell script 1 hour from now.
So I tested it as follows. First, here is SAS program test_hourly.sas:
filename outbox email 'bqualls@firstanalytics.com';
data _null_;
file outbox
to=('bqualls@firstanalytics.com')
subject="Test hourly process"
;
put "This is a test run at &SYSDATE9 at &SYSTIME..";
put "This program will run again one hour from now.";
put " ";
put " ";
put " ";
put "(signed)";
put "The First Analytics Team";
run;
And here is the script:
#!/bin/bash
#schedule this same script to run again one hour from now
echo "sh test_hourly.sh" | at now + 1hr
#run sas program
sh runsas.sh test_hourly
And I started the script for this first time like this:
echo "sh test_hourly.sh" | at 5:30pm November 22
Note: must cd to the directory where test_hourly.sh exists before issuing the above instruction.
You can also use the -f option to have at execute a particular file (a shell script).
at -f shell_script now + 1 hour
|
This would run the shell script 1 hour from now.
So I tested it as follows. First, here is SAS program test_hourly.sas:
filename outbox email 'bqualls@firstanalytics.com';
data _null_;
file outbox
to=('bqualls@firstanalytics.com')
subject="Test hourly process"
;
put "This is a test run at &SYSDATE9 at &SYSTIME..";
put "This program will run again one hour from now.";
put " ";
put " ";
put " ";
put "(signed)";
put "The First Analytics Team";
run;
And here is the script:
#!/bin/bash
#schedule this same script to run again one hour from now
echo "sh test_hourly.sh" | at now + 1hr
#run sas program
sh runsas.sh test_hourly
And I started the script for this first time like this:
echo "sh test_hourly.sh" | at 5:30pm November 22
Note: must cd to the directory where test_hourly.sh exists before issuing the above instruction.
Thursday, November 13, 2014
Excel: #VALUE error when using SUMPRODUCT and INDIRECT
This is a weird one...
This gives #VALUE error:
=SUMPRODUCT(INDIRECT("CP!"&ROW()&":"&ROW()),INDIRECT("CP!"&COLUMN()&":"&COLUMN()))
but this works:
=SUMPRODUCT(INDIRECT("CP!"&SUM(ROW())&":"&SUM(ROW())),INDIRECT("CP!"&SUM(COLUMN())&":"&SUM(COLUMN())))
Got the answer from http://stackoverflow.com/questions/22746000/using-indirect-function-in-the-sumproduct-formula-for-true-false-cell-refere:
I'm not sure why you need INDIRECT instead of ordinary cell references but the specific problem here is that ROW function returns an "array", even when it returns a single value, e.g. it returns {"x"} rather than just "x" - and in some circumstances Excel can't process that.
Try wrapping the second ROW function in a SUM function - the value doesn't change but it gets rid of the array, i.e.
=SUMPRODUCT((INDIRECT("A2"):INDIRECT("A"&(ROW()-1))=INDIRECT("A"&SUM(ROW())))*1)
This will eliminate #VALUE! eror while leaving the essential structure of your formula unchanged.
This gives #VALUE error:
=SUMPRODUCT(INDIRECT("CP!"&ROW()&":"&ROW()),INDIRECT("CP!"&COLUMN()&":"&COLUMN()))
but this works:
=SUMPRODUCT(INDIRECT("CP!"&SUM(ROW())&":"&SUM(ROW())),INDIRECT("CP!"&SUM(COLUMN())&":"&SUM(COLUMN())))
Got the answer from http://stackoverflow.com/questions/22746000/using-indirect-function-in-the-sumproduct-formula-for-true-false-cell-refere:
I'm not sure why you need INDIRECT instead of ordinary cell references but the specific problem here is that ROW function returns an "array", even when it returns a single value, e.g. it returns {"x"} rather than just "x" - and in some circumstances Excel can't process that.
Try wrapping the second ROW function in a SUM function - the value doesn't change but it gets rid of the array, i.e.
=SUMPRODUCT((INDIRECT("A2"):INDIRECT("A"&(ROW()-1))=INDIRECT("A"&SUM(ROW())))*1)
This will eliminate #VALUE! eror while leaving the essential structure of your formula unchanged.
Tuesday, September 23, 2014
Java: Including jar files
To compile:
/software/java64/jdk1.7.0_60/bin/javac -cp ~/class -d ~/class -extdirs ~/jars ~/src/MyProgram.java
To execute:
/software/java64/jdk1.7.0_60/bin/java -Djava.ext.dirs=/privdir/xcnb804/jars -cp ~/class MyProgram
Where I got burned was this: while compiling you can use the tilde on the -d option, but while executing you cannot use the tilde on the java.ext.dirs system property.
/software/java64/jdk1.7.0_60/bin/javac -cp ~/class -d ~/class -extdirs ~/jars ~/src/MyProgram.java
To execute:
/software/java64/jdk1.7.0_60/bin/java -Djava.ext.dirs=/privdir/xcnb804/jars -cp ~/class MyProgram
Where I got burned was this: while compiling you can use the tilde on the -d option, but while executing you cannot use the tilde on the java.ext.dirs system property.
Monday, September 15, 2014
Java: Get system property from the command line
java -Dmy.prop="my value" MyApp
public class Main {
public static void main(String[] argv) throws Exception {
String prop = System.getProperty("my.prop");
}
} Tuesday, September 9, 2014
SAS: proc sql nowarnrecurs
If your PROC SQL overwrites one if its inputs then you will get a warning message. You can eliminate that message by using the nowarnrecurs option. For example:
proc sql noprint nowarnrecurs;
create table work.a as
select * from work.a;
quit;
run;
proc sql noprint nowarnrecurs;
create table work.a as
select * from work.a;
quit;
run;
Wednesday, August 13, 2014
SAS: Can I use a macro variable within a macro name? (Yes)
I have need to use a macro variable within a macro name. (Sounds crazy, I know, and it borders on writing "write-only code", but it is a legitimate need.) Not knowing if this was possible, I wrote the following program:
* Can I use a macro variable inside a macro name? ;
* This would allow me to iterate through a series of macros. ;
%macro mac1;
%put mac1 was executed;
%mend mac1;
%macro mac2;
%put mac2 was executed;
%mend mac2;
%macro mac3;
%put mac3 was executed;
%mend mac3;
%macro main;
%do i = 1 %to 3;
%mac&i;
%end;
%mend main;
%main;
Output was as I had hoped:
mac1 was executed
mac2 was executed
mac3 was executed
So the answer to my question is Yes.
* Can I use a macro variable inside a macro name? ;
* This would allow me to iterate through a series of macros. ;
%macro mac1;
%put mac1 was executed;
%mend mac1;
%macro mac2;
%put mac2 was executed;
%mend mac2;
%macro mac3;
%put mac3 was executed;
%mend mac3;
%macro main;
%do i = 1 %to 3;
%mac&i;
%end;
%mend main;
%main;
Output was as I had hoped:
mac1 was executed
mac2 was executed
mac3 was executed
So the answer to my question is Yes.
Subscribe to:
Posts (Atom)

