Join Now

Juletip #5: Brug java i dit data step

by SAS Employee sdksda ‎12-07-2015 08:26 AM - edited ‎12-07-2015 08:32 AM (440 Views)

Java fyldte i år 20, og er et meget anvendt kodesprog. Fra SAS-kode er det faktisk muligt at lave Java objekter og kalde funktioner på det.


Jeg har lavet denne simple klasse i Java og vil bruge den i min SAS-kode. Den kompilerede fil er vedlagt (Java 1.6).

public class classRandom {
    public double getRandom(String str) {
        System.out.println(str);
        return Math.random();
    }
}


For at ens SAS session kan bruge denne klasse, skal den være del af ens classpath. Jeg bruger normalt disse 3 makroer til at gøre Java-koden tilgængelig i min SAS session. Dette gør også, at du fra din SAS-kode kan se, hvor Java-koden ligger. Hvis man om et års tid skal ind og rette koden.

 

%init_classpath_update;
%add_to_classpath(C:\JavaObj\samples.jar);
%reset_classpath;

De er hentet fra SAS Knowledge Base: http://support.sas.com/kb/38/518.html

* sti til projektet;
%let path =C:\projects\JavaPen;

* inkluder makroer;
%include "&path.\macro\add_to_classpath.sas";
%include "&path.\macro\init_classpath_update.sas";
%include "&path.\macro\reset_classpath.sas";

* Laver kopi af nuværende classpath;
%init_classpath_update;
* Tilføj til classpath, sti til de Java-filer man vil bruge;
%add_to_classpath(&path.\java\);


DATA result;
    * Opret java objekt i SAS;
    DECLARE JavaObj objektRandom("classRandom");

    do i = 1 to 10;
        random_number=0;
        * Kald metode på objektet;
        * Husk callDoubleMethod virker kun til metoder der returnerer doubles;
        objektRandom.callDoubleMethod("getRandom", "create random number", random_number);
           output;
    end;
RUN;
* Sætter classpath til den kopi der er lavet; %reset_classpath;

 

Når man laver funktioner der skal kaldes fra SAS-koden, skal man lige huske at der er forskellige funktioner, alt efter hvad Java returnerer. callDoubleMethod returnerer en double, mens callStringMethod returnerer en string.
objektRandom.callDoubleMethod("getRandom", "create random number", random_number);

Første parameter er navnet på den funktion, man gerne vil kalde.
objektRandom.callDoubleMethod("getRandom", "create random number", random_number);

Som sidste parameter angiver man den SAS variabel, man gerne vil have funktionens resultat skal ligge i.
objektRandom.callDoubleMethod("getRandom", "create random number", random_number);

Hvis den Java function man kalder, har nogle parameter, kan de angives mellem den første og sidste parameter i sas koden.
objektRandom.callDoubleMethod("getRandom", "create random number", random_number);

På SAS hjemmesiden, er der en forklaring på de forskellige call metoder.
http://support.sas.com/documentation/cdl/en/lecompobjref/67221/HTML/default/viewer.htm#n08eq9e57zd6l...

De gange jeg har brugt Java klasser i SAS-koden, var det for at bruge et Java API. Der gjorde det nemmere, at kommunikere med en bestemt server type fra SAS.

 

Link til ekstra information.

http://support.sas.com/documentation/cdl/en/lecompobjref/67221/HTML/default/viewer.htm#p1p8iy7j6aa64...

Attachment