【发布时间】:2015-02-06 23:12:21
【问题描述】:
这是我之前的问题的后续。 Transposing Comma-delimited field
我得到了针对特定案例的答案,但现在我有一个更大的数据集,因此不能在 datalines 语句中读取它。我有一个类似于此过程创建的数据集:
data MAIN;
input ID STATUS STATE $;
cards;
123 7 AL,NC,SC,NY
456 6 AL,NC
789 7 ALL
;
run;
这里有两个问题: 1:我需要为 STATE 列中的每个状态单独一行 2:注意第三个观察结果是“全部”。我需要将其替换为特定状态的列表,我可以从单独的数据集(如下)中获取。
data STATES;
input STATE $;
cards;
AL
NC
SC
NY
TX
;
run;
所以,这是我正在尝试但似乎不起作用的过程。 首先,我创建了一个插补所需的 STATES 列表,以及所述状态的计数。
proc sql;
select distinct STATE into :all_states separated by ','
from STATES;
select count(distinct STATE) into :count_states
from STATES;
quit;
其次,我尝试将“ALL”值出现在 STATE 的列表中。这是第一个错误出现的地方。如何确保变量 STATE 对于新值足够长?另外,如何处理逗号?
data x_MAIN;
set MAIN;
if STATE='ALL' then STATE="&all_states.";
run;
最后,我使用 SCAN 函数一次读取一个状态。我在这里也遇到了错误,但我认为修复上述部分可能会解决它。
data x_MAIN_mod;
set x_MAIN;
array state(&count_states.) state:;
do i=1 to dim(state);
state(i) = scan(STATE,i,',');
end;
run;
提前感谢您的帮助!
【问题讨论】:
标签: sas