Hello, I'm trying to use proc format to read in a table using the following code: data test_storm_categories;
length Start $8 End $8 Label $15;
retain fmtName "testStormFormat" type "n";
input Start $ End $ Label $;
infile datalines dlm = ",";
datalines;
low,63,No Category
64,82,Category 1
83,95,Category 2
96,112,Category 3
113,136,Category 4
137,high,Category 5
;
run;
proc format cntlIn = test_storm_categories;
run; But, I'm getting the following error: ERROR: Cannot mix missing and nonmissing values in the same range: .-63. Can someone explain to me why 'low' isn't being read as a keyword here? Thanks, kelbrosna PS. Here are some more details: 1. Version number (per proc setinit) is 9.04.01M6P110718, and I'm using SAS Studio. 2. I'm aware that you can specify keywords for ranges using an 'HLO' column, and that fix works for me. I don't need this code to work, I'm just curious why it fails. 3. This code is based on an exercise from the SAS Programming 2: Data Manipulation Techniques course notes (Lesson 4.2, page 4-20 step 2). a. The exercise uses a premade table (storm_categories.sas7bdat) from the course data (which I would include, but I don't think I'm allowed to share it), and I also read in that table using the following code: data storm_categories;
set pg2.storm_categories (rename=
(Low = Start High = End Category = Label));
retain fmtName "stormFormat";
run;
proc format cntlIn = storm_categories;
run; This code runs as expected, and it does not give any errors. What's perplexing about this is that the test_storm_categories dataset from the datalines statement in the original code is seemingly identical to this storm_categories dataset, but their behavior is different. b. When I export and re-import the storm_categories.sas7bdat table as a CSV file (using proc export and proc import), then perform the necessary operations and feed it to proc format, I get the same error as that from test_storm_categories. This makes me think that there may be some kind of hidden metadata in the storm_categories.sas7bdat table that matters. Is that a possibility? 4. The reason why I think the 'low' keyword is being misread is because when changed to a number, e.g. 40, no error is raised. However, the 'high' keyword doesn't raise any error, even when left unchanged. My current understanding of what is happening is that the character string "low" is being read as a missing numeric value, but I'm not sure why this is.
... View more