DS2 - Analytics, Business Intelligence and Data Management · DS2 Kenneth Rørdam, NextBridge...

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

Transcript of DS2 - Analytics, Business Intelligence and Data Management · DS2 Kenneth Rørdam, NextBridge...

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