Date: Thu, 4 Nov 1999 14:40:47 -0700
Reply-To: Jack Hamilton <JackHamilton@FIRSTHEALTH.COM>
Sender: "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From: Jack Hamilton <JackHamilton@FIRSTHEALTH.COM>
Subject: Comments on the SASWare Ballot
Content-Type: text/plain; charset=us-ascii
As is my custom, I would like to lobby for and against some items on the SASware ballot.
Overall, the ballot looks good. There are many fewer unnecessary items
(requests for things which could already be done easily) than in the past,
and it's almost always possible to figure out what the items mean.
1 provide a system option to control the number of decimal places
printed for any output
I'm not sure that this will be needed with the new Output Delivery System,
which is supposed to provide a much greater level of control over output
than could be achieved in V6.
3 add an FTP access method option in the FILENAME statement like the
TERMSTR= option that the SOCKET access method has in order to
specify what character to use as the end of line
I had asked for a superset of this, which is the ability to specify TERMSTR=
for any access method (plain old disk files in particular). I would find
this feature for files very useful,and I suspect that it would be useful
for anyone who uses multiple operating systems or reads data from the outside world.
Basically, what it's asking for is the ability to tell SAS what the line-
termination characters are. Sometimes we get files whose lines end with
CR, sometimes with LF, and sometimes with CRLF. It's surprisingly difficult
to coonvert files to the correct format to be read by SAS.
Please vote for this, in the hope that SAS Institute (SI) will provide the
option for all access methods, not just FTP and SOCKET.
5 provide the ability to set different linesize and pagesize values
for the SAS Log and SAS listing files
Well yes, of course. This would be very convenient.
6 add the ability to independently center, right justify, and/or
left justify a TITLE and a FOOTNOTE statement
SAS?Graph has this ability, and it really surprises me that SI hasn't
already added it to the base product.
*** DATA Step ***
10 provide the ability to use the special list variables _NUMERIC_
and _CHARACTER_ in the PUT statement
There are times when this would be convenient, but I'm not sure that it
deserves using up a vote. The ability to get the variable names in
alpha order would be more important to me.
13 add an option that will allow you to specify the order of the
variables (i.e., ORDER=var1 var2 var3)
We've had numerous discussions of this on SAS-L. The conclusion was,
in my opinion, that there's rarely any *need* for this, but it would
often be convenient, and there's no good general workaround that
doesn't involve re-processing the data. So vote for this one.
*** Functions ***
16 allow the MIN, MAX, USS, CSS, RANGE, and ORDINAL functions to
accept a single argument
You might think "Why would anyone want to do this?". Because it's much
easier to write macros if you don't have to process single arguments
as a special case.
*** WHERE Statement ***
24 provide the ability to display the WHERE clause in printed output
This would be helpful for quick-and-dirty report writing. I suppose
it would be be achieved through a special value in the TITLE statement,
similar to the manner in which you can now put BY values into a title.
*** Display Manager System(including text editor) ***
25 add a warning dialog to prompt whether to replace, append, or
cancel every time the FILE==>SAVE menu item is chosen to save a
file in the Program Editor
This would be an option, I hope. I wouldn't necessarily want to be
prompted every time.
PART II Base SAS Procedures
*** All Procedures ***
31 provide the ability to use -L, -C, and -R with formats in a FORMAT
statement to left- align, center, and right-align
Yes, this would be helpful.
32 provide an option to produce a header line when the input data set
contains no observations
Something else that's requested all the time. I will provide some
workarounds in a SUGI posters paper if my submission is accepted.
*** PROC CIMPORT ***
35 provide the ability to select specific data sets or catalogs from
a transport file when importing
This has been kicking around for a long time, and I'm surprised it
hasn't been implemented yet.
*** PROC FORMAT ***
40 enhance the FMTLIB option so that information on all format
libraries listed in the FMTSEARCH= option will be printed
It's possible to get this information now, but it would take some
tricky programming, so this would be useful for installations
which provide local format libraries. I'm assuming that they
really meant "information on all formats available through the
FMTSEARCH= list", which is not the same as what they said.
41 provide JUST and UPCASE functionality for the VALUE statement
Yes, please, please, please vote for this one! This would be *very*
helpful for processing the dirty data we sometimes have to process.
These options are already available for informats, so this would
be breaking new ground.
42 provide a front end to simplify creation and editing of
I don't care about the creation and editing, but this might also
provide a way to *view* formats in interactive SAS, and that would
be very welcome.
*** PROC FREQ ***
43 add an option in the TABLES statement to output the number of
unique values for a variable
This would be helpful.
*** PROC PRINT ***
45 provide an option to force a page eject if all observations in
the current BY group will not fit on the remainder of the page
Yes, and also in PROC REPORT.
*** PROC REPORT ***
49 provide the ability to suppress summary lines when there is only
one observation for a group
Yes, would make some reports look better.
50 add the ability to dynamically align text from LINE statements
with report columns
Yes, I've given up on using PROC REPORT for some things because of
the inability to do this.
51 provide the ability to group by computed columns
52 provide the ability to print the word 'CONTINUED' when a report
spans pages and to print 'END' on the last page
Would make reports look more professional.
*** PROC SORT ***
54 add an option to output observations deleted by the NODUP or
NODUPKEY option to an alternate data set
Not really needed, since NODUP doesn't always work right anyway (in V6),
and if you use the foolproof sort+data step solution, outputting the
dups is trivial.
*** PROC SQL ***
55 allow the automatic conversion of variables from character to
numeric when performing arithmetic expressions in a query
No. This would be an bad idea. If something like this must be added,
it should be an option which is not the default.
56 provide the ability to do index-only reads to enhance performance
when doing something like SELECT DISTINCT X (where x is a column
of a very large table)
This would be a good idea, but it might be in the works already. Many
other databases are already smart enough to do this.
59 add SORTEDBY information to DICTIONARY.TABLES
This can't be implemented, because it's not possible in the
general case. A vote for this might be taken as a vote for
creating something like DICTIONARY.SORTEDBY, or a new column
61 provide character versions of the MIN and MAX functions
This would be reasonable. The MIN and MAX functions in data steps
should also take character arguments.
63 use the header information contained in a SAS data set for the
COUNT(*) function when no subset criteria is given
I suspect that a vote for this is unneeded if you vote for #56.
64 create a pseudo-column that returns a number indicating the
sequence in which a row was selected from a table or set of joined
This is frequently requested, but not, I think, by people who know SQL.
67 add the ROLLUP, CUBE, and GROUPING SETS extensions
These extensions allow SQL to create summary groups similar to those
created by PROC SUMMARY in V6, but with more control. IIRC, PROC
SUMMARY in V8 will provide most of this capability, but not as
part of SQL.
You specify ROLLUP and CUBE operations in the GROUP BY clause of a query.
ROLLUP grouping produces a result set containing the regular grouped
rows and sub-total rows. CUBE grouping produces a result set containing
the rows from ROLLUP and cross-tabulation rows. So for ROLLUP, you can
get the sales by person by month with monthly sales totals and an overall
total. For CUBE, additional rows would be included for total sales by person.
If you use SQL regularly, vote for this one. Trust me.
PART III SAS Macro Facility
71 add line numbers to MPRINT output, so line numbers are continuous
in the SAS Log
That would be very helpful for debugging, as anyone who has tried to debug
a macro program knows.
72 provide the ability to delete macro variables
This is often requested, but I'm not sure why it would be needed.
74 allow the IN operator to be used in a macro
Yes, but I'd ask for more - not only IN, but also SELECT.
Ideally, we'd get an entirely new macro language, but I'm not holding
76 provide an automatic macro variable to return the number of the
current batch job
This item is misplaced - it should be under MVS.
PART IX SAS Component Language
136 enhance the FINFO function to return additional information such
as file size and modification date/time
I want this, but in the data step.
PART XVIII Data File Management
*** General ***
244 produce a NOTE in the SAS Log on all platforms when submitting a
FILENAME _ALL_ LIST statement that lists the FILEREF(s) and
physical name(s) of any FILENAME assigned, or a NOTE if there are
You can get this information from DICTIONARY.EXTFILES, so I wouldn't
vote for this if I thought it would take programmer time away from prompt whether to replace, append,
adding new capabilities.
*** SAS System under MVS ***
264 provide source control management system capability
More generally, I would say "provide hooks to external source code
control systems under all operating systems." I'm not sure that
most sites would want to run one SCCS from SI for SAS programs,
and another SCCS for everything else.
265 provide a check to see if a file is already allocated to a libref
before allowing a FILENAME statement, FILE command or anything
else to reference it as an external flat file
Should be an option, since you might want to open a dataset in multiple
Can't you already check to see if a file is allocated as a libref by
looking in DICTIONARY.MEMBERS?
PART XXX SAS System for Personal Computers
*** General ***
281 allow the -emailsys, -emaildlg, -emailid, and -emailpw options to
be set during run time
Yes. It particular, requiring that the password be set at invocation
leads to bad security practices.
Development Manager, Technical Group
METRICS Department, First Health
West Sacramento, California USA