BookmarkSubscribeRSS Feed
dennis_oz
Quartz | Level 8

Hi All,

I am trying to learn how to execute an api call on sas 9.3 using an example from below document .

But am getting the below error . 

when I checked online for the error , I am getting the resolution as changing the config file

C:\SAS\Lev1\SASApp\sasv9.cfg ...

is there another mothod to excute this proc http . 

 

Thanks in advance.

 

https://www.lexjansen.com/mwsug/2012/S1/MWSUG-2012-S110.pdf

%macro sas_getDist;

	data _null_;
		length url $ 2048;
		url = catt(
			'http://maps.googleapis.com/maps/api/directions/xml?origin=', &start,
			'&destination=', &end,
			'&sensor=false&alternatives=false');
		url = translate(trim(url), '+', ' ');
		call symputx('REQUEST_URL', url);
	run;

	FILENAME dist "\\Desktop\SAS\RESPONSE1.txt";

	proc http
		out = dist
		url = "%superq(REQUEST_URL)"
		method = "GET"
		ct = "application/x-www-form-urlencoded";
	run;

	filename xml_map "\\Desktop\SAS\google-maps-dist.map";
	libname dist xml xmlmap=xml_map;

	data _null_;
		set dist.distance;

		/* 1 mile = 1,609.344 meters */
		dist = dist / 1609.344;
		call symputx('DIST', dist);
	run;

%mend;

proc fcmp outlib=sasuser.funcs.web;
	function sas_getDist(start $, end $);
		rc = run_macro('sas_getDist', start, end, dist);
		return (dist);
	endsub;
quit;

data addresses;
	length name $ 32 address $ 128;
	infile datalines truncover;
	input name address $128.;
	datalines;
SAS SAS Campus Dr., Cary, NC 27513
YMCA 1603 Hillsborough St., Raleigh, NC 27605
NCSU Joyner Visitor Center, NC State University, Raleigh, NC 27695-7504
UNC-CH UNC Visitor Center, 250 East Franklin Street, Chapel Hill, NC
;

options cmplib=sasuser.funcs;

data distances;
	set addresses;
	dist = sas_getDist('SAS Campus Dr., Cary, NC, 27513', address);
run;

proc print data=addresses;
	where sas_getDist('SAS Campus Dr., Cary, NC, 27513', address) < 10;
run;
ERROR:

59         proc fcmp outlib=sasuser.funcs.web;
60         function sas_getDist(start $, end $);
61          rc = run_macro('sas_getDist', start, end, dist);
62          return (dist);
63         endsub;
64         quit;

ERROR: Write access to member SASUSER.FUNCS.DATA is denied.
WARNING: Failed to save function sas_getDist to sasuser.funcs.web.
ERROR 2
--------------
WARNING: No CMP or C functions found in library sasuser.funcs.
79          dist = sas_getDist('SAS Campus Dr., Cary, NC, 27513', address);
                   ___________
                   68
ERROR 68-185: The function SAS_GETDIST is unknown, or cannot be accessed.
3 REPLIES 3
dennis_oz
Quartz | Level 8
Sorry Kurt, I did not get you
Kurt_Bremser
Super User

This:

proc fcmp outlib=sasuser.funcs.web;

directs SAS to store the new function in a catalog in the SASUSER library; in your setup, this library is used in read-only mode.

Similarly, this:

options cmplib=sasuser.funcs;

tells SAS where to look for compiled functions. You need to use a different library for this; if you don't want the function to be permanently available, you can use WORK.

SAS Innovate 2025: Save the Date

 SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!

Save the date!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 3 replies
  • 771 views
  • 0 likes
  • 2 in conversation