<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Talk like a pirate: using a fun API and PROC HTTP in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Talk-like-a-pirate-using-a-fun-API-and-PROC-HTTP/m-p/894930#M353518</link>
    <description>&lt;P&gt;On this &lt;A href="https://en.wikipedia.org/wiki/International_Talk_Like_a_Pirate_Day" target="_self"&gt;Talk Like A Pirate Day&lt;/A&gt;, I decided to share a fun example of how to use SAS and a fun free API to generate some pirate-y insults and translations. For these I'm leveraging the APIs I found here:&amp;nbsp;&lt;A href="https://pirate.monkeyness.com/api.html" target="_blank" rel="noopener"&gt;https://pirate.monkeyness.com/api.html&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The format is simple: use PROC HTTP to call the API, capture the output in a text file, and then read that into a data set:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="sas"&gt;    filename rrr temp;

    proc http
      url="https://pirate.monkeyness.com/api/insult"
      out=rrr;
    run;

    data insult;
      infile rrr;
      length insult $ 255;
      input;
      insult=_infile_;
    run;

    filename rrr clear;&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Run that once to get one good-natured pirate insult. Want a bunch of these? Here's a macro routine to get more:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="sas"&gt;/* Insults! */
%macro pirateInsults(howMany);
  %do i=1 %to &amp;amp;howMany.;
    filename rrr temp;

    proc http
      url="https://pirate.monkeyness.com/api/insult"
      out=rrr;
    run;

    data r_&amp;amp;i;
      infile rrr;
      length insult $ 255;
      input;
      insult=_infile_;
    run;

    filename rrr clear;
  %end;

  /* combine insults into compendium */
  data insults;
    set r_:;
  run;

  /* delete temp data */
  proc datasets lib=work nodetails nolist;
    delete r_:;
  quit;

%mend;

%pirateInsults(5);&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pirateinsults.jpg" style="width: 683px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/88145iA82F25FF2F0C7A96/image-size/large?v=v2&amp;amp;px=999" role="button" title="pirateinsults.jpg" alt="pirateinsults.jpg" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This team offers a similar API for translations. This code translates English to "Pirate":&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="sas"&gt;%let phrase=Hey! You! Get off of my boat.;
filename rrr temp;
proc http 
 url="https://pirate.monkeyness.com/api/translate?english=%sysfunc(urlencode(&amp;amp;phrase))"
 out=rrr;
run;

data r;
  infile rrr;
  length insult $ 255;
  input;
  insult=_infile_;
run;

filename rrr clear;&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Output: "&lt;EM&gt;Ahoy! Ye! Get off o' me ship.&lt;/EM&gt;"&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;We can drive more phrases through using SAS macro and CALL EXECUTE.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="sas"&gt;data inputs;
 infile datalines dsd;
 length english $ 200;
 input english;
datalines;
I know what you did
Get your hands off of my treasure
Hey! You! Get off of my boat.
;
run;

%macro pirateTranslate(phrase,n);
  filename rrr temp;
  proc http 
   url="https://pirate.monkeyness.com/api/translate?english=%sysfunc(urlencode(&amp;amp;phrase))"
   out=rrr;
  run;

  data r_&amp;amp;n;
    infile rrr;
    length pirate $ 255;
    input;
    pirate=_infile_;
  run;

  filename rrr clear;
%mend;

data _null_;
  set inputs;
  call execute('%pirateTranslate('||english||','||_n_||');');
run;

data allTranslations;
  set r_:;
run;

/* delete temp data */
proc datasets lib=work nodetails nolist;
  delete r_:;
quit;&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="piratetranslate.jpg" style="width: 444px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/88146i2A8C64B4E5F6D2BD/image-size/large?v=v2&amp;amp;px=999" role="button" title="piratetranslate.jpg" alt="piratetranslate.jpg" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Got your own examples? Ahoy! Share it w' the crew!&lt;/P&gt;</description>
    <pubDate>Wed, 20 Sep 2023 12:35:52 GMT</pubDate>
    <dc:creator>ChrisHemedinger</dc:creator>
    <dc:date>2023-09-20T12:35:52Z</dc:date>
    <item>
      <title>Talk like a pirate: using a fun API and PROC HTTP</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Talk-like-a-pirate-using-a-fun-API-and-PROC-HTTP/m-p/894930#M353518</link>
      <description>&lt;P&gt;On this &lt;A href="https://en.wikipedia.org/wiki/International_Talk_Like_a_Pirate_Day" target="_self"&gt;Talk Like A Pirate Day&lt;/A&gt;, I decided to share a fun example of how to use SAS and a fun free API to generate some pirate-y insults and translations. For these I'm leveraging the APIs I found here:&amp;nbsp;&lt;A href="https://pirate.monkeyness.com/api.html" target="_blank" rel="noopener"&gt;https://pirate.monkeyness.com/api.html&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The format is simple: use PROC HTTP to call the API, capture the output in a text file, and then read that into a data set:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="sas"&gt;    filename rrr temp;

    proc http
      url="https://pirate.monkeyness.com/api/insult"
      out=rrr;
    run;

    data insult;
      infile rrr;
      length insult $ 255;
      input;
      insult=_infile_;
    run;

    filename rrr clear;&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Run that once to get one good-natured pirate insult. Want a bunch of these? Here's a macro routine to get more:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="sas"&gt;/* Insults! */
%macro pirateInsults(howMany);
  %do i=1 %to &amp;amp;howMany.;
    filename rrr temp;

    proc http
      url="https://pirate.monkeyness.com/api/insult"
      out=rrr;
    run;

    data r_&amp;amp;i;
      infile rrr;
      length insult $ 255;
      input;
      insult=_infile_;
    run;

    filename rrr clear;
  %end;

  /* combine insults into compendium */
  data insults;
    set r_:;
  run;

  /* delete temp data */
  proc datasets lib=work nodetails nolist;
    delete r_:;
  quit;

%mend;

%pirateInsults(5);&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pirateinsults.jpg" style="width: 683px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/88145iA82F25FF2F0C7A96/image-size/large?v=v2&amp;amp;px=999" role="button" title="pirateinsults.jpg" alt="pirateinsults.jpg" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This team offers a similar API for translations. This code translates English to "Pirate":&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="sas"&gt;%let phrase=Hey! You! Get off of my boat.;
filename rrr temp;
proc http 
 url="https://pirate.monkeyness.com/api/translate?english=%sysfunc(urlencode(&amp;amp;phrase))"
 out=rrr;
run;

data r;
  infile rrr;
  length insult $ 255;
  input;
  insult=_infile_;
run;

filename rrr clear;&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Output: "&lt;EM&gt;Ahoy! Ye! Get off o' me ship.&lt;/EM&gt;"&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;We can drive more phrases through using SAS macro and CALL EXECUTE.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="sas"&gt;data inputs;
 infile datalines dsd;
 length english $ 200;
 input english;
datalines;
I know what you did
Get your hands off of my treasure
Hey! You! Get off of my boat.
;
run;

%macro pirateTranslate(phrase,n);
  filename rrr temp;
  proc http 
   url="https://pirate.monkeyness.com/api/translate?english=%sysfunc(urlencode(&amp;amp;phrase))"
   out=rrr;
  run;

  data r_&amp;amp;n;
    infile rrr;
    length pirate $ 255;
    input;
    pirate=_infile_;
  run;

  filename rrr clear;
%mend;

data _null_;
  set inputs;
  call execute('%pirateTranslate('||english||','||_n_||');');
run;

data allTranslations;
  set r_:;
run;

/* delete temp data */
proc datasets lib=work nodetails nolist;
  delete r_:;
quit;&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="piratetranslate.jpg" style="width: 444px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/88146i2A8C64B4E5F6D2BD/image-size/large?v=v2&amp;amp;px=999" role="button" title="piratetranslate.jpg" alt="piratetranslate.jpg" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Got your own examples? Ahoy! Share it w' the crew!&lt;/P&gt;</description>
      <pubDate>Wed, 20 Sep 2023 12:35:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Talk-like-a-pirate-using-a-fun-API-and-PROC-HTTP/m-p/894930#M353518</guid>
      <dc:creator>ChrisHemedinger</dc:creator>
      <dc:date>2023-09-20T12:35:52Z</dc:date>
    </item>
  </channel>
</rss>

