Can we rename formats Catalog in sas? - sas

I have a requirement to change formats.sas7bcat file to forms.sas7bcat
I am wondering, if it is possible? If yes, then how should I do that?
Either manually or with coding?
Thanks for your Help!

You can use PROC DATASETS to rename catalogs in addition to renaming datasets. To make sure it finds the catalog named FORMATS instead of a dataset named FORMATS use the MEMTYPE= option.
So if the catalog is in the libref MYLIB then the code would look like:
proc datasets nolist lib=MYLIB memtype=catalog;
change formats=forms ;
run;
quit;

The formats.sas7bcat file is a file on disk, so you certainly could rename it using windows techniques (or linux or whatnot).
You also can create it with the desired name when you create your formats, by using:
proc format library=yourlib.forms;
[whatever format code you are using]
run;
Then you can use options fmtsearch=(yourlib.forms work); or similar to make sure it is looking at that format catalog for formats.

Related

create lookup table from all formats

I would like to export all available user defined formats into a single lookup table that would contain columns format, value, and label (so that I can use it to manipulate data in R and SQL).
Is there a way to do this ?
You can export the contents of a SAS format catalog (commonly, formats.sas7bcat) with the CNTLOUT method on PROC FORMAT:
proc format lib=mylib cntlout=myformatds;
quit;
This would take the default format catalog stored in the library mylib as formats.sas7bcat and export it to a dataset, myformatds in the work library.
As #user667489 indicated in the comment, the answer was in using PROC FORMAT with the CNTLOUT option.
The general format of the instruction is:
PROC FORMAT
LIBRARY=lib_name CNTLOUT=created_table;
RUN;
One must specify the library however, to find out which library is relevant one can take a look at SASHELP.VFORMAT.
Then one can create different tables and concatenate them.
In my case all user defined formats were in a library called LIBRARY and I don't need all columns so my solution is:
PROC FORMAT
LIBRARY=LIBRARY CNTLOUT=FORMAT_LOOKUP (KEEP=FMTNAME START END LABEL);
RUN;

Export .sas7bdat from SAS Studio to local machine

I am using SAS Studio(completely browser based). I need to export a dataset to my local machine in the .sas7bdat file format. I think it should be something like PROC EXPORT data = sqrtReg2 outfile = "C:\Documents\SAS\Target_Wins.sas7bdat";. But that returns the error ERROR: Unable to determine datasource type. Please use the DBMS= option.. But the DBMS option only allows for CSV, tab and DLM. How do I export this data set to my local machine in the .sas7bdat file format?
With the SAS University Edition you can setup shared folders in the virtual machine where SAS runs that are mapped to actual folders on your real machine.
For example you might have mapped C:\Documents\SAS\ to /folders/myfolders. You cannot write to other locations on your real machine that are not mapped so that the virtual machine can see them. Check the documentation for exact details of getting the folders mapped.
The normal way to have SAS place a dataset then is to create a libref that points to the folder and then use a two level name when referencing the data set. You could create a libref named OUT for example:
libname out '/folders/myfolders/';
data out.target_wins;
set sqrtReg2;
run;
But you can also just refer to the file directly without first creating a libref.
data '/folders/myfolders/target_wins';
set sqrtReg2;
run;
Note that since SAS is actually running in Unix you cannot use CamelCaseFileNames for your SAS datasets. The files will always be in all lowercase letters.
None of the answers worked for me. Maybe because after April 2021, they have made changes to the platform(University). So, after a lot a time searching, I found what I needed.
You can easily export the sas dataset to csv, xslx, by just right clicking on the dataset and selecting export as csv, xlsx, etc.
For exporting to sas7bdat file, do:
Create your dataset, I am creating from csv, so create a program1(.sas) to first convert csv to sas dataset.
proc import file="/home/u123/mydata.csv"
out=work.mydata
dbms=csv
replace;
run;
This will create your sas dataset.
IMP Go to "Libraries" at the right bottom, and hit "My Libraries" -> New Library -> Name it(eg - test), give path(eg - /home/u123/sasuser.v94)
Check library creation, and HIT "Refresh Library Session" on right pane, don't refresh the page.
Now create a separate program2(.sas), to export the dataset to .sas7dbat file.
PROC COPY IN=WORK OUT=test;
SELECT mydata;
run;
quit
This will create a .sas7bdat file in your directory, with same name as your dataset.
These exact steps worked out for me.
It won't work for 2 reasons.
You can't export a SAS dataset to a SAS dataset (.sas7bdat) - Proc Export will export to excel, csv, etc but not to a .sas7bdat.
you're running SAS Studio from within a Virtual Machine that uses Linux as OS so path to create an external file is incorrect. You haven't hit this error but you will once you use the right filetype.
When you installed SAS Studio you should have created a shared folder. This folder is accessed from within SAS Studio as /folders/myfolders/filename.
So your code should looks like this:
PROC EXPORT data = sqrtReg2
outfile = "/folders/myfolders/Target_Wins.csv";
run;
From Windows the path to this shared folder will depend upon where you installed your VM.
Option 2
If what you need is the dataset then try the following code:
libname out "/folders/myfolders/";
proc copy in=work out=out;
select sqrtReg2 ;
run;
Again, table will be in your shared folder which is accesible from Windows.
I used just like option 2 in the above answer. I need to export my polygon data from SAS Studio in my virtual machine so that i can import it to my Visual Analytics. and it worked just fine.
libname out "/folders/myfolders/";
proc copy in=work out=out;
select my_map;
run;

Exporting sas dataset to excel named ranges

I have few datasets in SAS. They are to be exported to a excel file in some locations. Each dataset to be exported to some range(named ranges are defined in that excel). Is there any possibility to export datasets into excel for a specific "named ranges" which are predefined in existing excel file.
Thanks,
Ravi
There is a solution to export directly to an Excel named range provided you have SAS/ACCESS to Excel. For this example, assume that you have Office installed in your SAS environment, the Excel file is stored in C:\Data, and you have a named range called Named_Range.
First, you want to make a connection to the Excel data set using the libname engine:
libname xls Excel 'C:\Data\Excel_Data.xlsx';
You can then output directly to the named range like a data set. If there are contents already in it, be sure to delete them first using PROC DATASETS.
proc datasets lib=xls nolist;
delete Named_Range;
quit;
data xls.Named_Range;
set have;
run;
This is just one example of using it, but the thing that's so great about the libname engine is how it takes external data sets and lets you treat them like SAS data sets. If your named range had the right dimensions, you could theoretically output directly to it using any procedure that can produce a data set.
If you do not have SAS/ACCESS to Excel, I am unsure of a solution specifically with named ranges, though you could work around it using the RANGE= option in PROC EXPORT with the xls/xlsx dbms type.
Sources
http://www.stratia.ca/papers/excel_libname.pdf
http://support.sas.com/documentation/cdl/en/acpcref/63181/HTML/default/viewer.htm#n1wvmggexroxgyn17rp61jml3cvn.htm

Import data from European Social Survey

I need to import data from European Social Survey databank to SAS.
I'm not very good at using SAS so I just naively tried importing the text file one gets but it stores it all in one variable.
Can someone maybe help me with what to do? Since there doesn't seem to be a guide on their webpage I reckon it has to be pretty easy.
It's free to register (and takes 5 secs) and I need all possible data for Denmark.
Edit: When downloading what they call a SAS file, what i get is a huge proc format and the same text file as one gets by choosing text.
The data in the text file isn't comma separated and the first row does not contain variable names.
Download it in SAS format. Save the text file in a location you can remember, and open the SAS file. It's not just one big proc format; it's a big proc format followed by a datastep with input code. It was probably created by SPSS (it fits the pattern of an SPSS saved .sas file anyhow). Look for:
DATA OUT.ESS1_4e01_0_F1;
Or something like that (that's what it is when I downloaded it). It's probably about 3/4 of the way down the page. You just need to change the code:
INFILE 'ESS1_4e01_0_F1.txt';
or similar, to be the directory you placed the text file in. Create a LIBNAME for OUT that goes to wherever you want to permanently save this, and do that at the start of the .sas file, replacing the top 3 lines like so.
Originally:
LIBNAME LIBRARY '';
LIBNAME OUT '';
PROC FORMAT LIBRARY=LIBRARY ;
Change these to:
libname out "c:\mystuff\"; *but probably not c:\mystuff :);
options fmtsearch=(out);
proc format lib=out;
Then run the entire thing.
This is the best solution if you want the formatted values (value labels) and variable labels. If you don't care about that, then it might be easier to deal with the CSV like Bob shows.
But the website says yu can download SAS format, why don't you?
You need a delimiter if all goes into one column.
data temp;
length ...;
infile 'file.csv' dlm=',';
input ...;
run;
As Dirk says, the web site says you can download a SAS dataset directly. However, if there's some reason you don't want to do that, choose a comma separated file (CSV) and use PROC IMPORT. Here is an example:
proc import out=some_data
datafile='c:\path\somedata.csv'
dbms=csv replace;
getnames=yes;
run;
Of course, this assumes the first row contains column names.

questions on sas formating issue

In the following sas code segment, what do the "lib=sasuser " and "select" mean here? Thanks.
proc format lib=sasuser cntlout = sasuser.fmtdata;
select $airport;
run;
The code you posted will read the formats catalog from the sasuser library (sasuser.formats), selecting only the custom character format $airport (out of the many other possible formats that might also be contained in the catalog) and write its definition to a SAS table (sasuser.fmtdata).
Once the format definition is in a SAS table you can use it to generate a report on the definition of the format. You can also modify the definition of the format by modifying the table contents and feeding it back into proc format using the cntlin option to create or update a format in a format catalog by reading its definition from an input SAS table.
You can find out more about the various proc format options on the SAS support site at http://support.sas.com/documentation/cdl/en/proc/61895/HTML/default/a000063536.htm