如何在SAS中创建长度不同的Datalines,生成指定结构的数据集
SAS数据集生成问题解决方案
问题分析
你原代码的问题在于:input a b; 默认要求每行读取两个数值变量,最后一行仅提供了一个数值4,SAS默认会尝试读取下一行数据补全变量,但数据行已结束,导致该数值无法被正确识别,最终出现4被“删除”的现象。
解决方案
根据你想要的结构,分两种情况给出代码:
情况1:生成长格式分组数据集(每个分组对应多个数值)
如果你想要的是a对应3个数值、b对应4个数值的分组结构(每个观测为分组标识+对应数值),可以定义分组变量和数值变量:
data my_data; length group $1; /* 定义分组变量为字符型,长度1 */ input group value; datalines; a 1 a 2 a 3 b 1 b 2 b 3 b 4 ; run;
生成的数据集包含7个观测,核心结构如下:
| group | value |
|---|---|
| a | 1 |
| a | 2 |
| a | 3 |
| b | 1 |
| b | 2 |
| b | 3 |
| b | 4 |
情况2:生成宽格式数据集(a有3个值,b有4个值,缺失值补全)
如果你希望保留原变量a和b,让a有3个非缺失值、b有4个非缺失值,可以添加missover选项,确保一行数据不足时剩余变量设为缺失:
data my_data; infile datalines missover; /* 禁止跨行读取,数据不足时变量设为缺失 */ input a b; datalines; 1 1 2 2 3 3 4 ; run;
生成的数据集包含4个观测,第四个观测的a为缺失值(.),b为4,核心结构如下:
| a | b |
|---|---|
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| . | 4 |
你也可以直接在最后一行的4前添加.表示a缺失,无需missover选项:
data my_data; input a b; datalines; 1 1 2 2 3 3 . 4 ; run;
内容的提问来源于stack exchange,提问作者Dave Twickenham
相关产品推荐
相关产品推荐

