BookmarkSubscribeRSS Feed
radhames_gomez
Calcite | Level 5

Hello,

 

I'm trying to use python inside a proc fcmp.  I configure the sascfg_personal.py to use winiomwin but when the session is starting present the follow error message:  

 

ERROR: Micro Analytic Service failed to execute method
ERROR: Python execution: Traceback (most recent call last): File "E:\SAS\SASHome\SASFoundation\9.4\tkmas\sasmisc\mas2py.py", line
394, in execute out = up[1].get(func)[0](up[0])(*parms) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File
"C:\Users\sasdemo\AppData\Local\Temp\tmplfbeub0i\py.py", line 5, in sasReadWrite sas = saspy.SASsession('E:\Program
Files\Python311\Lib\site-packages\saspy\sascfg_personal.py')   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^TypeError: SASsession.__init__()
takes 1 positional argument but 2 were given

 

Here is the SAS code

 

proc fcmp;
length workpath outfile $ 500;
workpath = pathname('work');
file log;
declare object py(python);
submit into py;
def sasReadWrite(workpath):
	"""Output: output_table"""
	import pandas as pd
	import saspy;
	sas = saspy.SASsession('E:\Program Files\Python311\Lib\site-packages\saspy\sascfg_personal.py')
	ds = sas.sasdata(table='AIR', libref='SASHELP')
	df_from_sd  = ds.to_df()
	sas.saslib(libref='out', path = workpath)
	outds = sas.dataframe2sasdata(
	df = df_from_sd,
		libref = 'out',
		table = 'final',
		encode_errors = 'replace'
	)

	sas.endsas()
	return outds.table
endsubmit;

	rc = py.publish();
	rc = py.call('sasReadWrite', workpath);
	outfile = py.results['output_table'];
	if not missing(outfile) then 
		put 'Output dataset:' outfile;
run;

proc print data=final(obs=10);
run;

 

 

4 REPLIES 4
sastpw
SAS Employee

I can't speak to your overall workflow, but the error you're getting is because you need the keyword for that value: cfgfile=

sas = saspy.SASsession(cfgfile='E:\Program Files\Python311\Lib\site-packages\saspy\sascfg_personal.py')

All parameters for SASsession are keyword, not positional. So, that should get rid of this error.

 

Tom

radhames_gomez
Calcite | Level 5

Hey Tom,

 

In my sascfg_personal.py the SAS Config Name = winiomwin.   Should i change the cfgfile value to winiomwin. ?

 

 

sastpw
SAS Employee

Have you tried using SASPy outside of proc fcmp, so you can figure out how it works and see if what you are doing is correct? Trying to figure out what's wrong from running inside of proc fcmp isn't going to work. cfgfile is the path of the config file you want to use, when you don't simply have it in any of the search paths where it would already be found. cfgname is the name of a config definition in that file (python Dict with config values). So, no, that wouldn't make sense. You're just running this with a local SAS install on your PC? Just run Python and SASPy there outside of SAS to get a connection and see that what you're trying to do is correct.

 

 

 

sastpw
SAS Employee

Did you get this working? Was that syntax error the only issue?

Ready to join fellow brilliant minds for the SAS Hackathon?

Build your skills. Make connections. Enjoy creative freedom. Maybe change the world. Registration is now open through August 30th. Visit the SAS Hackathon homepage.

Register today!
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.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 4 replies
  • 577 views
  • 0 likes
  • 2 in conversation