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
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
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;