Keep track of who accessed SAS data sets in a compute server
Recent Library Articles
Recently in the SAS Community Library: SAS' @BrunoMueller gets asked whether it is possible to track who has accessed which SAS data sets and when. He usually refers them to this article: Auditing data access: who did what and when? This post expands on that article and explains how to use this in SAS Viya with additional features such as custom message layout and filtering (no log entries for libref WORK or SASHELP).
Current situation: An established pattern in SAS Enterprise Miner is to use the IGN-node with binary transformation of a linear target variable to go on and make use of the scorecard node to make a logistic regression model based on the binary transformed new target variable. In Model Studio this pattern is only partly implemented as it is only the binary transformation in the IGN node that is possible to use. Due to the current limitation of Model Studio that prevents the user to switch target variable within a project, it is impossible to add a scorecard node to the IGN node as the project is initiated with a linear target variable. This behavior is confirmed in support case CS0221275. The result is that the user has to make use of multiple Model Studio projects to be able to build a LGD model as proposed in this paper 141-2012: Building WOE Binned LGD Scorecards using SAS® Enterprise Miner™. In addition, if the user wants to build a scorecard model as a challenger model to other kinds of LGD models that make use of a linear target you end up with a scattered process with models developed here and there. Desired outcome: Make it possible to create a scorecard model within the same project as where the binary transformation is performed. Added benefit: Easier to document the model development and easier to maintain the model development project (mind you that these models and highly regulated and tend to live for years ). Easier to utilise link to Model Manager from Model Studio. When pushing a model from Model Studio to Model Manager, the default behavior is to create a new Model Manager project pr Model Studio project and this would then possibly result in multiple Model Manager projects if not resolved. Negative effect of change: None.
... View more
When i am working on SAS viya visual analytics , i got the unexpecting IF error while creating advance filter . below is the query ( i am using LTS 2024.03 version of sas viya) IF ((('LOANPARAM'p IsSet) OR ('CCCParam'p IsSet) OR ('UCICParam'p IsSet) OR ('CustNameParam'p IsSet)) RETURN (('Loan Account No'n)Contains('LOANPARAM'p))and (('Common Client Code'n)Contains('CCCParam'p)) AND ) ((UCIC)Contains('UCICParam'p))AND (('Customer Name'n)Contains('CustNameParam'p))) ELSE (true)
... View more
For a while now the Financial Management Studio in our development environment doesn't show any data. Any try to create data will throw out an error message: Our SAS system administrator couldn't find anything wrong with FM. We don't have access to PostGre FM database neither to the logs. If I get into Models I get the error message: Could not create the view: An unexpected exception was thrown. And when I press Details I get this: java.lang.NullPointerException at com.sas.solutions.finance.rcp.commons.dimensions.core.DimensionsCore.getCurrentSASComparator(DimensionsCore.java:266) at com.sas.solutions.finance.rcp.models.ui.views.ModelsColumnProvider.getCurrentDataLocaleNameColumn(ModelsColumnProvider.java:172) at com.sas.solutions.finance.rcp.models.ui.views.ModelsColumnProvider.getDefaultViewColumns(ModelsColumnProvider.java:189) at com.sas.solutions.finance.rcp.models.ui.views.ModelsView.createController(ModelsView.java:207) at com.sas.solutions.finance.rcp.commons.ui.AbstractColumnViewerView.initializeController(AbstractColumnViewerView.java:256) at com.sas.solutions.finance.rcp.commons.ui.AbstractColumnViewerView.createPartControl(AbstractColumnViewerView.java:75) at com.sas.solutions.finance.rcp.commons.ui.AbstractPagedColumnViewerView.createPartControl(AbstractPagedColumnViewerView.java:17) at com.sas.solutions.finance.rcp.models.ui.views.ModelsView.createPartControl(ModelsView.java:100) at org.eclipse.ui.internal.ViewReference.createPartHelper(ViewReference.java:375) at org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:229) at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:313) at org.eclipse.ui.internal.ViewPane.setVisible(ViewPane.java:529) at org.eclipse.ui.internal.presentations.PresentablePart.setVisible(PresentablePart.java:180) at org.eclipse.ui.internal.presentations.util.PresentablePartFolder.select(PresentablePartFolder.java:270) at org.eclipse.ui.internal.presentations.util.LeftToRightTabOrder.select(LeftToRightTabOrder.java:65) at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation.selectPart(TabbedStackPresentation.java:473) at org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:1254) at org.eclipse.ui.internal.PartStack.createControl(PartStack.java:666) at org.eclipse.ui.internal.PartStack.createControl(PartStack.java:574) at org.eclipse.ui.internal.PartSashContainer.createControl(PartSashContainer.java:568) at org.eclipse.ui.internal.PerspectiveHelper.activate(PerspectiveHelper.java:272) at org.eclipse.ui.internal.Perspective.onActivate(Perspective.java:981) at org.eclipse.ui.internal.WorkbenchPage.setPerspective(WorkbenchPage.java:3614) at org.eclipse.ui.internal.WorkbenchPage.busySetPerspective(WorkbenchPage.java:1041) at org.eclipse.ui.internal.WorkbenchPage.access$16(WorkbenchPage.java:1025) at org.eclipse.ui.internal.WorkbenchPage$19.run(WorkbenchPage.java:3715) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) at org.eclipse.ui.internal.WorkbenchPage.setPerspective(WorkbenchPage.java:3713) at org.eclipse.ui.internal.Workbench.showPerspective(Workbench.java:2723) at com.sas.solutions.finance.rcp.commons.internal.ui.workspace.WorkspaceSelectorAction.run(WorkspaceSelectorAction.java:49) at com.sas.solutions.finance.rcp.commons.internal.ui.workspace.WorkspaceSelectorItem.select(WorkspaceSelectorItem.java:273) at com.sas.solutions.finance.rcp.commons.internal.ui.workspace.WorkspaceSelectorItem.select(WorkspaceSelectorItem.java:264) at com.sas.solutions.finance.rcp.commons.internal.ui.workspace.WorkspaceSelectorItem$3.mouseUp(WorkspaceSelectorItem.java:158) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:213) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2629) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2593) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2427) at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:670) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:663) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at com.sas.solutions.finance.rcp.commons.ui.application.FMSApplication.start(FMSApplication.java:180) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574) at org.eclipse.equinox.launcher.Main.run(Main.java:1407) Please help.
... View more
I have a problem to invoke the web service shared by SAS using DS2. Please note that proc soap working fine for me. proc ds2;
data _null_;
method run();
/* instantiate the package */
declare package http h();
declare varchar(1024) body ;
declare int rc;
DECLARE varchar(10000) content;
content=
'<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:soap="http://www.SoapClient.com/xml/SoapResponder.xsd">
<soapenv:Header/>
<soapenv:Body>
<soap:Method1
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<bstrParam1 xsi:type="xsd:string">apple</bstrParam1>
<bstrParam2 xsi:type="xsd:string">zebra3</bstrParam2>
</soap:Method1>
</soapenv:Body>
</soapenv:Envelope>
;;;;' ;
/* create a GET */
h.createPostMethod('http://soapclient.com/xml/soapresponder.wsdl');
h.setRequestBodyAsString(content);
h.setRequestContentType('text/xml; charset="utf-8"');
/* execute the GET */
h.executeMethod();
/* retrieve the response body as a string */
h.getResponseBodyAsString(body, rc);
put body;
end;
run; Log: 1 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK; 72 73 74 proc ds2; 75 76 data _null_; 77 method run(); 78 /* instantiate the package */ 79 declare package http h(); 80 declare varchar(1024) body ; 81 declare int rc; 82 83 DECLARE varchar(10000) content; 84 85 content= 86 '<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 87 xmlns:xsd="http://www.w3.org/2001/XMLSchema" 88 xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 89 xmlns:soap="http://www.SoapClient.com/xml/SoapResponder.xsd"> 90 <soapenv:Header/> NOTE: The quoted string currently being processed has become more than 262 bytes long. You might have unbalanced quotation marks. 91 <soapenv:Body> 92 <soap:Method1 93 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 94 <bstrParam1 xsi:type="xsd:string">apple</bstrParam1> 95 <bstrParam2 xsi:type="xsd:string">zebra3</bstrParam2> 96 </soap:Method1> 97 </soapenv:Body> 98 </soapenv:Envelope> 99 ;;;;' ; 100 101 /* create a GET */ 102 h.createPostMethod('http://soapclient.com/xml/soapresponder.wsdl'); 103 h.setRequestBodyAsString(content); 104 105 h.setRequestContentType('text/xml; charset="utf-8"'); 106 /* execute the GET */ 107 h.executeMethod(); 108 /* retrieve the response body as a string */ 109 110 h.getResponseBodyAsString(body, rc); 111 put body; 112 end; 113 114 run; <?xml version="1.0"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <SOAP-ENV:Fault> <faultcode>SOAP-ENV:Client</faultcode> <faultstring>Error Parsing Request Message.</faultstring> <faultactor>/xml/soapresponder.wsdl</faultactor> <detail> <e:faultdetails xmlns:e="http://sqldata.com/soapfault"> <message>Error at Line 1, position 562 Error c00cee2d, Incorrect document syntax.</message> <errorcode>1526</errorcode> </e:faultdetails> </detail> </SOAP-ENV:Fault> </SOAP-ENV:Body> </SOAP-ENV:Envelope> NOTE: Note from DS2 package d2http: NOTE: Failed to determine character set from request content type. Defaulting to UTF-8 for encoding the request body. ERROR: Error reported by DS2 package d2http: ERROR: Invalid character set '"utf-8"'. NOTE: Note from DS2 package d2http: NOTE: Failed to determine character set from response content type (text/xml; charset="utf-8"). Defaulting to UTF-8 for decoding the response body. NOTE: Execution succeeded. No rows affected. 115 116 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK; 128
... View more
Hello, I need help with processing a date variable that I need to pass to a macro variable. The date variable is in the following format 20MAR2025:00:00:00.000000 (DATETIME25.6). I need help with accomplishing 2 things. First, I need to reformat this date variable like so 2025-03-20 00:00:00. Second, I need to pass "2025-03-20 00:00:00" into a macro variable. Thank you.
... View more
Nominations are in, and the SAS Customer Recognition Awards voting is complete! Winners get a full trip to SAS Innovate (May 6-9) in Orlando, FL! See the 60+ inspiring entries from SAS users! Winners will be announced at SAS Innovate!