When you hit cntl-H and you have a find window open, SAS EG should close it and open the replace window.
And when you hit cntl-F and you have a replace window open, SAS EG should close it and open the find window.
Also, if you have a find window open and hit cntl-F, SAS EG should activate the find window and select the 'find text'.
A lot a usable space is lost on the SAS Logon Manager web page. I find it useful to reuse part of it
in order to display Important/Urgent messages to the incoming users :
for example, maintenance scheduled with outage at < day, time> , system operation scheduled at etc.
I know it's not officially permitted but I have already modified the Logon HTML code , inside the deployed hierarchy of SAS Web App Server to allow this. It worked fine altough the content update process was risky and required editing manually a file on the midtier machine ...
Wouldn't it be nice to allow this kind of feature to SAS 9.4 admins, using an update channel well-devised and somewhat easy to use (for instance, a Stored Process with text fields and some little typographical enrichments to be selected optionally like Red colored text, bold font etc.) ? This would replicate the Message Of The Day (motd) broadcasting feature known for a long time on Unix systems or SAS-wise the (little-known) NEWS system option.
To illustrate my point, I've taken the liberty to take a caption of such a Logon modified page (courtesy of SAS Institute ; )
See picture above.
Thanks for considering this idea !
PS I've tagged this idea with SAS Studio even though it's broader actually
It would be helpful to have concatenation on the IDLABEL statement. At the moment it only allows variables like:
IDLABEL alergy_variable; * where 'alergy_variable' may be 'Milk', 'Beef', or whatever the value of the variable is;
However the IDLABEL statement is for 'labeling' so it would be nice if the statement would allow for better dynamic labeling like so:
IDLABEL cat("Do you think you have a food alergy to...",alergy_variable);
Currently, we can create a SP from a program or an entire process flow, but it would be great to extend that to ordered lists, since they can cross process flows.
One reason for this is because it is really impossible to keep in sync a project -- with multiple flows and programs -- with the SP equivalent of that project. I don't think being able to create a SP from an entire project would be useful since I regularly have process flows that are informational or for testing rather than production, or a project may have multiple lists (for multiple reports, for example).
In SAS 9.4 you can create block plots but only on the x-axis. Several uses cases need the same behaviour for the Y-axis. For instance if you represent depth it is nautural to have depth (the identifier) on the y axis and the respone on the x-axis.. The concept using histogram as an example i further discussed in the following communities discussion.
Users can open a SAS data set in Enterprise Guide without realising that they will be locking this data set. If a data set is left open in Enterprise Guide for an extended period, even though it may not be actively browsed, it can prevent any updates.
I have created an add-in (Simple Data Viewer) to copy a SAS data set into a DataGrid object, which separates the view of the data from the source data set, and does not need any lock to be set. This means that the source data set can be updated as required.
Can this functionality be incorporated into Enterprise Guide?
Currently when using the autoname option it adds a prefix to the end of the variable name.
It would be helpful to have an option to add it to the beginning of the name instead. Depending on the type of analysis this can be important to later use variable shortcut lists appropriately.
There are currently many ways to accomplish this but it would be a nice to have feature/option to do this automatically.
I am surprised this has not been suggested yet. Or I couldn't find it.
Some databases allow subsetting a table by taking the first n rows of each subgroups with a data set, sorted by a chosen criterion.
The query usually looks similar to this:
select row_number() over (partition by ID order by DATE desc) RANK from table
Even more useful (luxurious even!) would be to support row-limiting clauses in this new language feature, like:
row_number() over (partition by ID order by DATE desc) fetch first 5 rows only
or fetch first 10 percent with ties
I am aware that the very useful first. and last. operators allow something similar in a data step. That is not the point.
When using the XLSX option to read Excel data, I would like to be able to force an Excel column to be read into a character variable, even if the column contains only numeric values. With other engines, I believe this would be done with the DBSASTYPE option.
libname myfile xlsx "%sysfunc(pathname(work))\myexcel.xlsx" ; *write sashelp.class to excel ; data myfile.class ; set sashelp.class ; run ; *Failing pseudo code to read in the Excel file, forcing Age to be character ; data ClassCharAge ; set myfile.class(dbsastype=(Age='CHAR(20)')) ; run ;
Use case is that suppose I receive an incremental Excel file weekly, and I have a SAS job to load the data into a database. I have a variable that is defined as character in database, but some incremental Excel files may only have numeric values for that variable. When I import such an Excel file, it is loaded into a numeric variable in SAS even though the database and my SAS code expect it to be character.
Yes I can add code to by ETL job to check if the field is numeric or character and then convert it from numeric to character myself, and yes I hate Excel and could avoid this by converting the Excel file to CSV or just telling the customer not to send me Excel in the first place. But since many engines support the DBSASTYPE option, would be nice to see it supported by the XLSX engine.
It would be handy if SAS accepted date literals in ISO format:
and datetime literals:
'2018-04-04T08:34:25.678'dt (the "T" may be replaced by a blank)
in addition to the default DATE9. format.
I'd like to see a simpler way of creating and using hash tables...something consistent with the syntax and structure of either data statements or proc sql structure.
My suggestion...something lie this:
libname foobar memory; (kind of like memlib, but cross-platform)
and then it could be generated like this:
create foobar as select id,desc from sometable key=id;
data foobar; set sometable; keep id,desc; key=id; run;
from that point on, foobar could be used just like any other dataset:
proc sql; select store,storetable.id,foobar.desc from storetable left join foobar on storetable.id=foobar.id;
That seems much easier to use and teach than hash and it's yet-another-syntax.
At the moment, it is possible to create a single connection to a single LDAP server and in that connection, 2 queries, a single query for users and a single query for the groups.
In the past, the User Bulk loading could allow an array of queries, for both the users and the groups, and also a certain pagination based on number of observations or based on alphanumeric order and you could split the queries.
It would be really nice and useful in SAS Viya, especially in SAS Visual Analytics environments, where it is expected a usage of thousands of users per organisation , the possibilities to:
Having code completion in EG and SAS Studio is helpful, but I often find myself typing file paths, as well. Being able to tab-complete much like you can in Bash would be very helpful.
I am using SAS VIYA and making use of the geo map object. Where this is falling short is that there is no way of setting the amount of zoom or the altitude of the view point.
It would help us if we could
A) Set a default zoom or altitude on the object or
B) Include zoom or altitude in the data as a component of the geography field.
As it is, when the filtered data is reduced to one point, we get the street rather than the location of the suburb. The intent of our map is to show the suburb and its surrounds so the user can identify the area. As it is we get a zoomed in map centered on the longitude and latitude.
Is this something that depends on the map service being used or is it something that could be coded into VIYA?
When editing the details on an object in SAS Studio we have the ability to add 'notes' it would be nice to be able to use markdown to 'beautify' the notes.
Often I get this:
NOTE: There were 63 observations read from the data set LIB.TOTALDRUGRX.
NOTE: The data set LIB.TOTALDRUGRX has 63 observations and 5 variables.
NOTE: Compressing data set LIB.TOTALDRUGRX increased size by 100.00 percent.
Compressed is 2 pages; un-compressed would require 1 pages.
So the compressed dataset is bigger than the uncompressed version?!?
How about not compressing it if the result is bigger?
The RENAME statement (and dataset options) can now handle renaming lists of variable if both the SOURCE and TARGET names are simple numerical suffix lists. So I could write statements like these:
rename old1-old5=new1-new5 ; rename old1-old5=new6-new10 ; rename old1-old5=old2-old6;
But frequently we have other lists of variable names, including just simple space delimited names like you would use in any SAS statement. I would request that we enhance the RENAME statement to allow the addition of extra parenthesis to rename lists of variables. So things like this:
rename (a b c d e)=(name age sex height weight); rename old1-old5=(a b c d e); rename a--e=var1-var5 ; rename (name age sex height weight)=var1-var5 ; rename new:=var1-var5;
It would be nice to have a CAT_() type function that uses the format applied to the variables rather than Best for numeric variables.
For example, I would have preferred if the WANT_STRING was the same as the output from the HAVE_STRING code, since a format is applied to the variables already.
data have; format date1-date20 date9.; format datec1-datec20 $9.; length datec1-datec20 $9. x_string y_string $256.; array _date(*) date1-date20; array _datec(*) $ datec1-datec20; do i=1 to dim(_date); _date(I)=floor(ranuni(25)*365+1); _datec(I)=trim(put(_date(I), date9.)); end; have_string=catx(", ", of _date(*)); want_string=catx(", ", of _datec(*)); run; proc print ; run;
Add a DESC= to allow user-coded description value to as many "proc-level" (i.e. DATA step, PROC xxxxx, possibly ODS ) statements as possible. Add an option to add this descriptor to some SASLOG messages such as at the end of DATA or PROC when showing CPU use.
z/OS specific, add this value to the SAS SMF record.
The intent is to allow "grouping" of pieces of a program, to easier identify the parts that error messages come from, or analysis of resources used, with a value of meaning to the user. Such as "summarization and redistribution of sales by region" which might consist of many different DATA and PROC actions but be one logical piece to the user.