Thoughts of a Crime Show Junkie: Inadmissible Evidence
Recent Library Articles
Recently in the SAS Community Library: SAS' @RhondaWilliams reveals how SAS Law Enforcement Intelligence helps law enforcement agencies expedite detailed data entry using the Evidence Creation feature.
Proc export giving additional quotes to the quoted char values.and if u use data step for that it is giving a space or . To numeric values which is not required . Needs to change nothing.now it is , , but want ,, no space no .for missing numeric value.
... View more
Wondering about methods to hide a row in PROC TABULATE.
Suppose I have a simple table with DATE in rows, PASS in column and have a total row. So daily data for April like:
data have ;
do date='01Apr2024'd to '30Apr2024'd ;
do id=1 to 5 ;
pass=ranuni(9)<.3 ;
output ;
end ;
end ;
format date date9. ;
run ;
proc tabulate data=have;
class date pass ;
tables (date all),pass ;
run ;
I want to make that table, but show only the rows for Apr 24 -Apr 30, and the ALL row. But I want the ALL row to reflect all 30 days, even though the table only shows rows for 7 days.
In my mind, I want the table as above, but just hide the rows for Apr 1 - Apr 23.
My first thought is to extend my data to have data as is for April 24-30, and then output all the rows again with date set to some arbitrary value that I can use to make an "ALL" row. So something like:
data want ;
set have ;
if date>='24Apr2024'd then output ;
date='09Sep2099'd ;
output ;
run ;
proc format ;
value datef
'09Sep2099'd='01Apr2024 - 30Apr2024'
other=[date9.]
;
run ;
proc tabulate data=want;
class date pass ;
tables date,pass ;
format date datef. ;
run ;
That works and gives me the desired output:
----------------------------------------------------------
| | pass |
| |-------------------------|
| | 0 | 1 |
| |------------+------------|
| | N | N |
|------------------------------+------------+------------|
|date | | |
|------------------------------| | |
|24APR2024 | 3.00| 2.00|
|------------------------------+------------+------------|
|25APR2024 | 3.00| 2.00|
|------------------------------+------------+------------|
|26APR2024 | 4.00| 1.00|
|------------------------------+------------+------------|
|27APR2024 | 3.00| 2.00|
|------------------------------+------------+------------|
|28APR2024 | 5.00| .|
|------------------------------+------------+------------|
|29APR2024 | 4.00| 1.00|
|------------------------------+------------+------------|
|30APR2024 | 4.00| 1.00|
|------------------------------+------------+------------|
|01Apr2024 - 30Apr2024 | 113.00| 37.00|
----------------------------------------------------------
But I'm curious about other options. It almost feels like I could do this with a MULTILABEL format and a CLASSDATA dataset, but in the end I don't think that will work.
I will be using ODS for the output (probably ODS POWERPOINT). So I guess I could try setting a STYLE attribute like ROWHEIGHT=0 for some rows (using CLASSLEV), and see if TABULATE will let me 'hide' a row that way.
... View more
Hi I'm trying to calculate outliners within a datset trying: proc sql; SELECT CASE WHEN a.row_num <= ceil(0.25 * b.total_rows) THEN 1 WHEN a.row_num <= ceil(0.5 * b.total_rows) THEN 2 WHEN a.row_num <= ceil(0.75 * b.total_rows) THEN 3 ELSE 4 END AS quartile, AVG(a.value) AS quartile_value FROM (SELECT value, row_num() AS row_num FROM MYDATASET) AS a INNER JOIN (SELECT count(*) AS total_rows FROM MYDATASET) AS b ON 1=1 GROUP BY quartile; quit; My dataset have three col=sector (char), country (char), value (num) ERROR: Function ROW_NUM could not be located. ERROR: Expression using less than or equal (<=) has components that are of different data types. ERROR: Expression using less than or equal (<=) has components that are of different data types. ERROR: Expression using less than or equal (<=) has components that are of different data types. 1451 quit; I can't use OVER or HAVING or such beacuse of my version of my computer,
... View more
I am trying to perform SG Annotation with BY Variables. In this trivial example, I want one plot with a red arrow for the plot of Male data; and one plot for the females with a green arrow, depending on the value of SEX in SASHELP.CLASS
Here's my code that doesn't work (stealing from the example here).
%sganno
data sgannodata;
set sashelp.class(obs=2);
if sex='M' then do;
%sgarrow(x1=51, x2=30, y1=30, y2=30, linecolor="red")
end;
else if sex='F' then do;
%sgarrow(x1=51, x2=30, y1=30, y2=35, linecolor="green")
end;
keep sex;
run;
proc sort data=sashelp.class out=class;
by descending sex ;
run;
proc sgplot data=class sganno=sgannodata;
scatter x=age y=weight;
by descending sex;
run;
Here's the incorrect output (the correct output would be the red arrow on the males and the green arrow on the females, not both arrows on both plots)
... View more