Choose Language Hide Translation Bar
Highlighted
ahmedmohamed
Level III

Convert sas code to JSL

I need to convert this code to JSL

the code reference " Pharmaceutical Statistics Using SAS®: A Practical Guide "

 

Thanks in advance

 

AHMED IBRAHIM
4 REPLIES 4
Highlighted
txnelson
Super User

Re: Convert sas code to JSL

Your request is a non trivial request.  It would take many hours of work for an individual skilled in SAS, JMP and statistics to accomplish the task.  I suggest that you get in touch with a contract house to pay them to have the conversion done.

 

I assume you need the code converted because you do not have access to SAS, and/or you are not familiar with SAS.

If the issue is one of not having access to SAS, one can access SAS University Edition, and with minor change, can get the program to successfully execute.

Jim
Highlighted
gzmorgan0
Super User

Re: Convert sas code to JSL

@ahmedmohamed 

 

I agree with Jim.  I am not sure if the JMP nonlinear platform can perform ridge analysis. It is easy to put bounds on the parameter estimates, but I am not familiar with the Loss formula. I do know that JSL is easier for most of the SAS data steps.  

 

The JSL below shows some of the first steps for input and executing a simple linear and simple non-linear fit.

//conversion
Names Default to Here(1);

dt_cs = Open("$Downloads/elisa_cs.csv");

dt_cs << select where(! (:plate=="A" & :series==1));
dt_cs << delete Rows(); //only keep A 1

dt_calib = Data Table( "elisa_cs" ) << Stack(
	columns( :rep1, :rep2, :rep3 ),
	Source Label Column( "Label" ),
	Stacked Data Column( "signal" ),
	Output Table Name("calib")
);

dt_calib << New Column("w", numeric, continuous, << Set each value(1/:signal^1.3));

report1  = dt_calib << Fit Model(
	Weight( :w ),
	Y( :signal ),
	Effects( :concentration ),
	Personality( "Standard Least Squares" ),
	Emphasis( "Minimal Report" ),
	Run
);

report1 << Save Columns( {"Prediction Formula"}); //predictions are saved to the data table
 
lin_est = report1 << get estimates; //vector 
show(lin_est);


gb = dt_calib << Graph Builder(
	Size( 522, 456 ),
	Show Control Panel( 0 ),
	Show Legend( 0 ),
	Variables(
		X( :concentration ),
		Y( :signal ),
		Y( :Pred Formula signal, Position( 1 ), Side( "Right" ) )
	),
	Elements( Points( X, Y( 1 ), Legend( 6 ) ), Line( X, Y( 2 ), Legend( 11 ) ) ),
	SendToReport(
		Dispatch(
			{},
			"Graph Builder",
			OutlineBox,
			{Set Title( "Fit of the Linear Model" ), Image Export Display( Normal )}
		),
		Dispatch(
			{},
			"concentration",
			ScaleBox,
			{Scale( "Log" ), Format( "Best", 6 ), Min( 1 ), Max( 1000 ), Inc( 1 ),
			Minor Ticks( 0 )}
		),
		Dispatch(
			{},
			"signal",
			ScaleBox,
			{Format( "Fixed Dec", 12, 0 ), Min( 0 ), Max( 4 ), Inc( 1 ),
			Minor Ticks( 1 ), Label Row(
				{Show Major Grid( 1 ), Show Minor Grid( 1 )}
			)}
		),
		Dispatch(
			{},
			"Pred Formula signal",
			ScaleBox,
			{Format( "Fixed Dec", 12, 0 ), Min( 0 ), Max( 4 ), Inc( 1 ),
			Minor Ticks( 1 )}
		),
		Dispatch(
			{},
			"400",
			ScaleBox,
			{Legend Model(
				11,
				Properties(
					0,
					{Line Color( 19 ), Line Width( 3 )},
					Item ID( "Mean(Pred Formula signal)", 1 )
				)
			)}
		)
	)
);

//Note since this is a simple weighted regression the analysis and plot can be created with Bivariate
//here the predicteds are saved, not the formula

report1_biv = dt_calib << Bivariate(
	Y( :signal ),
	X( :concentration ),
	Weight( :w ),
	Fit Line( {Confid Shaded Fit( 1 ), Line Color( {212, 73, 88} ), Save Predicteds} ),
	SendToReport(
		Dispatch(
			{},
			"1",
			ScaleBox,
			{Scale( "Log" ), Min( 1 ), Max( 1000 ), Inc( 1 ), Minor Ticks( 0 )}
		),
		Dispatch(
			{},
			"2",
			ScaleBox,
			{Min( 0 ), Max( 4 ), Inc( 1 ), Minor Ticks( 1 ),
			Label Row( {Show Major Grid( 1 ), Show Minor Grid( 1 )} )}
		),
		Dispatch(
			{},
			"Bivar Plot",
			FrameBox,
			{Grid Line Order( 2 ), Reference Line Order( 3 )}
		)
	)
);

//=========================================================================================
//NonLinear fit

nlmod = dt_calib <<	New Column( "NonLin Model",
		Numeric,
		"Continuous",
		Format( "Best", 12 ),
		Formula(
			Parameter(
				{top = 3, bottom = 0.2, c50 = 250, slope = 1},
				top + (bottom - top) / (1 + (:concentration / c50) ^ slope)
			)
		)
	);

report2_nlin = dt_calib << Nonlinear(
	Y( :signal ),
	X( :NonLin Model ),
	Weight( :w ),
	Newton,
	Finish,
	SendToReport(
		Dispatch(
			{"Plot"},
			"1",
			ScaleBox,
			{Scale( "Log" ), Format( "Best", 6 ), Min( 1 ), Max( 1000 ), Inc( 1 ),
			Minor Ticks( 0 )}
		),
		Dispatch(
			{"Plot"},
			"2",
			ScaleBox,
			{Min( 0 ), Max( 4 ), Inc( 1 ), Minor Ticks( 1 ),
			Label Row( {Show Major Grid( 1 ), Show Minor Grid( 1 )} )}
		)
	)
);
report2 _nlin << Confidence Limits;
report2 _nlin << Save Estimates; //updates the column nlmod

nlin_est = report2_nlin << get estimates; //vector

show(nlin_est);

//==== up to proc nlmixed
Highlighted
ahmedmohamed
Level III

Re: Convert sas code to JSL

Great effort . Thanks a lot
AHMED IBRAHIM
Highlighted
ahmedmohamed
Level III

Re: Convert sas code to JSL

I apply this code in sas but I have a problem in the last part of code  

 

 

AHMED IBRAHIM