Create Dataset with DSL (from Fraktal SAS Programming)
Version vom 8. Juli 2014, 15:54 Uhr von Wolf-Dieter Batz (Diskussion | Beiträge)
What is this?
There are many occasions when data are needed that are not really present. Think of a particular test scenario for generic report design or a series of artificial datasets used to test a specific algorithm.
Representing a fully featured 3rd generation programming language, SAS DSL provides all means to generate data of unlimited variation in structure, size and precision.
This example will make use of iteration and two random number generators to produce a sample dataset with character, integer and floating-point columns.
Documented Code
Code executed | Function performed |
---|---|
data random; |
Initiate data step processing with a DATA statement and a name |
do group = 'A','B','C','D','X','Y','Z'; |
Start outer loop over discrete values given in comma separated list |
do seed = 1 to 1000 by 1; |
Start inner loop over integers given by start, end and increment |
select (group); |
Start branching over values from outer loop |
when ('A','B','C','D') noise = ranuni(seed); |
Assign uniform distribution random number generator to listed values |
otherwise noise = normal(seed); |
Assign normal distribution random number generator to remainder of values |
end; |
End branching over values from outer loop |
output; |
Write current content of PDV to dataset 'random' |
end; |
Terminate inner loop |
end; |
Terminate outer loop |
run; |
End the data step run-group |
Results
When issuing the phrase "vt random" in the command window of your SAS session, the following table might pop-up in a "Viewtable Window":
group | seed | noise |
---|---|---|
D | 990 | 0.25404 |
D | 991 | 0.28915 |
D | 992 | 0.58119 |
D | 993 | 0.22943 |
D | 994 | 0.28024 |
D | 995 | 0.94102 |
D | 996 | 0.27041 |
D | 997 | 0.86849 |
D | 998 | 0.40269 |
D | 999 | 0.47663 |
D | 1000 | 0.63694 |
X | 1 | 0.82346 |
X | 2 | -1.04528 |
X | 3 | 2.59510 |
X | 4 | -1.61314 |
X | 5 | 0.78804 |
X | 6 | 1.24662 |
X | 7 | 1.31970 |
X | 8 | -0.08472 |
X | 9 | -1.37055 |
X | 10 | -0.20202 |