SAS PROC export to excel and save format - sas

I have SAS guide output.
I want to PROC export him, the problem is that when i export him to excel
All the format changes.
When I use in the SAS guide the "export as step in the..." everything is ok.
But I need the PROC export
So , how can I export and save all of the format ?
Thanks

PROC EXPORT DATA= WORK.data
OUTFILE= "c:\your_path\OutputFileName"
DBMS=XLS LABEL REPLACE;
NEWFILE=YES;
RUN;
For more on proc export see http://support.sas.com/documentation/cdl/en/proc/70377/HTML/default/viewer.htm#n045uxf7ll2p5on1ly4at3vpd47e.htm

Related

How to find out all Excel worksheets' names in SAS without using pcfiles or ExcelCS libnames?

I have been trying to import a large Excel file in SAS consisting 20 worksheets. I am using following macro for proc import
%macro excel_imp(outds, worksheet);
proc import
out=&outds
datafile= "Z:\temp\sample"
dbms=XLSX replace;
sheet="&worksheet";
getnames=yes;
run;
%mend excel_imp;
%excel_imp(Ds1,Worksheet1);
%excel_imp(Ds2,Worksheet2);
The above code is running fine, but I have to call the macro 20 times with separate worksheet names.
I would like an automated code to identify the worksheet names and then use the macro above. I don't have pcfiles/ExcelCS in my SAS EG, I am using 9.4
Appreciate any help! Thanks.
Since XLSX clearly works, why not use the XLSX libname.
libname demo xlsx 'path to xlsx file';
proc copy in=demo out=work;
run;

Can you name reports in SAS EG?

In EG I want to create a report and export it using a macro variable in the name of the export file, so that if I re-run the report and the variable changes (i.e. a timestamp) it will not override my previous report.
When I create a report using proc report is automatically names my report after the code that created it. The export function is created in a point and click function and I can't use macro variables in there. Is there a simple way to name a report in the proc report procedure?
process flow screen shot
Yes you can
You will have to use proc export or do a datastep using infile
here is an example with proc export
proc sql outobs=1;
select datetime :into dt
from table;
proc export data=<report_data>
OUTFILE="<path_to_file>/report_&dt..csv"
DBMS=CSV LABEL REPLACE;
RUN;
that should work well!

Jupyter notebook display SAS output word-wrapper

I have a table in sas format (.sas7bdat) and would like to output it in Jupyter notebook.
proc print data=dataBoxE.my_data (firstobs=2 obs=12);
run;
The output table is jammed together since it has 100+ columns. How should I setup the environment within my notebook?
Moreover, is there a way to save the log file instead of opening it right away in the output cell? Thanks.
In SAS you can change the location of where the log file is created using proc printto; Documentation here.
When using proc printto, don't forget to reset the location to the default system value at the end of your, Example:
proc printto log='c:\em\log1.log';
run;
/* Your code here */
proc printto;
run;
If you don't need the 100+ columns; then select only the ones you want using the VAR statement in proc print Documentation here :
proc print data=exprev;
var country price sale_type;
run;
If you want all the 100+; just export them to csv using proc export and view them in any spreadsheet reader to avoid crashing your browser. Documentation here.
proc export data=sashelp.class
outfile='c:\myfiles\Femalelist.csv'
dbms=csv
replace;
run;

Exporting SAS data into SPSS with value labels

I have a simple data table in SAS, where I have the results from a survey I sent to my friends:
DATA Questionnaire;
INPUT make $ Question_Score ;
CARDS;
Ned 1
Shadowmoon 2
Heisenberg 1
Athelstan 4
Arnold 5
;
RUN;
What I want to do, using SAS, is to export this table into SPSS (.sav), and also have the value labels for the Question_Score, like shown in the picture below:
I then proceed to create a format in SAS (in hope this would do it):
PROC FORMAT;
VALUE Question_Score_frmt
1="Totally Agree"
2="Agree"
3="Neutral"
4="Disagree"
5="Totally Disagree"
;
run;
PROC FREQ DATA=Questionnaire;
FORMAT Question_Score Question_Score_frmt.
;
TABLES Question_Score;
RUN;
and finally export the table to a .sav file using the fmtlib option:
proc export data=Questionnaire outfile="D:\Questionnaire.sav"
dbms=spss replace;
fmtlib=work.Q1frmt;
quit;
Only to disappoint myself seeing that it didn't work.
Any ideas on how to do this?
You didn't apply the format to the dataset, unfortunately, you applied it to the proc freq. You would need to use PROC DATASETS or a data step to apply it to the dataset.
proc datasets lib=work;
modify questionnaire;
format Question_Score Question_Score_frmt.;
run;
quit;
Then exporting will include the format, if it's compatible in SAS's opinion with SPSS's value label rules. I will note that SAS's understanding of SPSS's rules is quite old, based on I think SPSS version 9, and so it's fairly often that it won't work still, unfortunately.

How do I import a census table into SAS when the variable name has special characters in it?

I am using SAS Enterprise Guide, importing American Community Survey tables from the census into a script to work with them. Here is an example of a raw census csv I'm importing into SAS Enterprise Guide:
within my data step, when I use the command
County=Geo.display-label;
I get this error:
In base SAS, I was using
County=Geo_display_label;
While that worked in base SAS, when I tried that in Enterprise Guide, I got this error:
What is a way to get the raw data's variable name Geo.display-label to read into SAS Enterprise Guide correctly?
To see the impact of the VALIDVARNAME option on the names that PROC IMPORT generates when the column headers are not valid SAS names lets make a little test CSV file.
filename csv temp ;
data _null_;
file csv ;
put 'GEO.id,GEO.id2,GEO.display-label';
put 'id1,id2,geography';
run;
If we run PROC IMPORT to convert that into a SAS datasets when VALIDVARNAME option is set to ANY then it will use the column headers exactly, including the illegal characters like period and hyphen. To reference the variables with those illegal characters we will need to use name literals.
options validvarname=any;
proc import datafile=csv replace out=test1 dbms=dlm;
delimiter=',';
run;
proc contents data=test1; run;
proc freq data=test1;
tables 'GEO.display-label'n ;
run;
But if we set the option to V7 instead then it will convert the illegal characters into underscores.
options validvarname=v7;
proc import datafile=csv replace out=test2 dbms=dlm;
delimiter=',';
run;
proc contents data=test2; run;
proc freq data=test2;
tables geo_display_label ;
run;
County = 'geo.display-label'n;
if you set OPTIONS VALIDVARNAME=V7; in EG you will get the same names as batch sas.