12
DS2 Kenneth Rørdam, NextBridge Consulting AS FANS 2. mars, 15. mars og 16. mars 2016 Hvorfor DS2 Hvordan komme i gang Metode vs. Makro JSON Pakke NLS Transcoding Failure Demo fra fremtiden

DS2 - Analytics, Business Intelligence and Data Management · DS2 Kenneth Rørdam, NextBridge Consulting AS FANS 2. mars, 15. mars og 16. mars 2016 •Hvorfor DS2 •Hvordan komme

Embed Size (px)

Citation preview

DS2

Kenneth Rørdam, NextBridge Consulting AS

FANS

2. mars, 15. mars og 16. mars 2016

• Hvorfor DS2• Hvordan komme i gang• Metode vs. Makro• JSON• Pakke• NLS Transcoding Failure• Demo fra fremtiden

Hvorfor DS2

proc ds2;

data tabell_ny (overwrite = yes);

dcl char(20) variabel;

method metode();

end;

method init();

end;

method run();

set tabell_gammel;

metode();

end;

method term();

end;

enddata;

run;

quit;

Hvordan komme i gang

Metode vs. Makro

proc ds2;

data diff (overwrite = yes keep = (diff varName rowNo));

dcl double diff rowNo;

dcl char(5) varName;

method comp(double varOld, double varNew, char(5) curVar);

if varOld ^= varNew then do;

diff = varOld - varNew;

varName = curVar;

rowNo = _n_;

output;

end;

end;

method run();

set OldNew;

comp(var1O, var1N, 'var1');

comp(var2O, var2N, 'var2');

comp(var3O, var3N, 'var3');

comp(var4O, var4N, 'var4');

comp(var5O, var5N, 'var5');

end;

enddata;

run;

quit;

{"posts": {

"data": [{

"message": "Godt nytt år! ","created_time": "2015-12-31T12:39:11+0000","from": {

"name": "Kenneth Rørdam","id": "10152342411416945"

},"id": "10152342411416945_10153220753781945"

}],

},"id": "10152342411416945"

}

Pakke

method init();

* 2015;

getPosts('1420070400','1427760000');

getPosts('1427846400','1435622400');

getPosts('1435708800','1443571200');

getPosts('1443657600','1451520000');

end;

method getPosts(char(10) since_date, char(10) until_date);

* Deklarasjoner;

dcl package http httpPI();

dcl int rc;

dcl varchar(65534) character set utf8 response;

* Oppretter et GET-kall mot Facebook;

httpPI.createGetMethod(

'https://graph.facebook.com/v2.5/me?fields=posts.limit(1000).since(‘

|| since_date ||

').until(‘

|| until_date ||

'){message,created_time,from,id,place}&access_token=' ||

%tslit(&access_token));

* Kjører GET-kallet;

httpPI.executeMethod();

* Mottar responsen -> legges i response-objektet;

httpPI.getResponseBodyAsString(response,rc);

* Starter å lese meldinger;

readPostInfo(response,'','','');

end;

method readPostInfo (varchar(65534) character set utf8 response_parent, char(200) msg_parent, char(50) msg_aut_parent, char(40) msg_id_parent);

* Delkarasjoner;

dcl package http httpPI();

dcl package json jsonPI();

* Fyller JSON-objektet med respons-objktet fra forelder;

rc = jsonPI.createParser(response_parent);

* Går gjenneom respons-filen;

do while (rc = 0);

* Henter neste element;

jsonPI.getNextToken(rc, token, tokenType, parseFlags);

* Hvis vi er på "comments"- eller "posts"-elementet (til meldingen);

if (token in ('posts‘ 'comments')) then do;

* Går gjennom alle elementer;

do while (token ^= ']');

* Henter neste element;

jsonPI.getNextToken(rc, token, tokenType, parseFlags);

if (token = 'message') then do; < … > end;

if (token = 'created_time') then do; < … > end;

if (token = 'from') then do; < … > end;

if (token = 'place') then do; < … > end;

if (token = 'id') then do;

jsonPI.getNextToken(rc, token, tokenType, parseFlags);

msg_id_current = token;

httpPI.createGetMethod('https://graph.facebook.com/v2.5'||token||'?fields=comments{……

httpPI.executeMethod();

httpPI.getResponseBodyAsString(response,rc);

readPostInfo(response, msg_current, msg_aut_current, msg_id_current);

end;

if (token = '}') then do;

end;

end;

end;

* Terminerer JSON-objektet;

rc = jsonPI.destroyParser();

end;

proc ds2 xcode = ignore;

NLS Transcoding Failure

https://partnerwaves.sas.com

Demo fra fremtiden