如何从SAS中的插播数据中读取具有不同字符长度的变量?

时间:2017-09-23 03:54:35

标签: sas

希望是一个简单的。 我对SAS很新。

我正在尝试使用以下SAS代码读取数据(根据讲义中给出的),但由于某些字符长度问题,它没有生成正确的SAS数据集。我试过了:和&一些打击和审判,但无法解决它。任何人都可以向我解释我如何解决这个问题?

data SMSA_subset_weather;
length city $ 27;
input city & JanTemp JulyTemp RelHum Rain; 
datalines; 
Akron, OH 27 71 59 36 
Albany-Schenectady-Troy, NY 23 72 57 35 
Baltimore, MD 35 77 55 43 
Allentown, Bethlehem, PA-NJ 29 74 54 44 
Atlanta, GA 45 79 56 47 
;
run
;

enter image description here 我正在使用SAS ON DEMAND。当我使用dsd时它会给我所需的输出,如下所示:

data SMSA_subset_weather;
infile datalines delimiter=" " dsd;
length city $ 27;
input city & JanTemp JulyTemp RelHum Rain; 
datalines; 
"Akron, OH" 27 71 59 36 
"Albany-Schenectady-Troy, NY" 23 72 57 35 
"Baltimore, MD" 35 77 55 43 
"Allentown, Bethlehem, PA-NJ" 29 74 54 44 
"Atlanta, GA" 45 79 56 47 
;
run
;

enter image description here 我通过修改instream数据和使用dsd选项来实现这一目标。但我认为如果有更多此类观察,我无法处理。

1 个答案:

答案 0 :(得分:1)

您需要在城市名称或引号后面加第二个空格。

使用可能出现在数据中的分隔符时,您可以像使用&那样请求SAS读取,直到找到两个连续的分隔符。 (您也可以使用DSD选项和引号。)

所以这里:

data SMSA_subset_weather;
length city $ 27;
input city & JanTemp JulyTemp RelHum Rain; 
datalines; 
Akron, OH  27 71 59 36 
Albany-Schenectady-Troy, NY  23 72 57 35 
Baltimore, MD  35 77 55 43 
Allentown, Bethlehem, PA-NJ  29 74 54 44 
Atlanta, GA  45 79 56 47 
;
run
;

或者在这里,使用带引号的DSD:

data SMSA_subset_weather;
length city $ 27;
infile datalines dsd dlm=' ';
input city JanTemp JulyTemp RelHum Rain; 
datalines; 
"Akron, OH" 27 71 59 36 
"Albany-Schenectady-Troy, NY" 23 72 57 35 
"Baltimore, MD" 35 77 55 43 
"Allentown, Bethlehem, PA-NJ" 29 74 54 44 
"Atlanta, GA" 45 79 56 47 
;
run
;