我在sas中遇到了扫描功能问题。
我拥有的数据集包含一个需要分成多个变量的变量。
变量的结构如下:
4__J04__1__SCH175__BE__合成人/编排__合成人/ bewerker __(空白)__ 1__17__108.03__93.7
我使用以下代码将其拆分为多个变量:
data /*ULB.*/work.smart_BCSS_withNISS_&JJ.&K.; set work.smart_BCSS_withNISS_&JJ.&K.; /* Maand splitsen in variablen */ mois=scan(smart,1,"__"); jours=scan(smart,2,"__"); nbjours=scan(smart,3,"__"); refClient=scan(smart,4,"__"); paysPrestation=scan(smart,5,"__"); wordingFR=scan(smart,6,"__"); wordingNL=scan(smart,7,"__"); fOnction=scan(smart,8,"__"); ARTISTIQUE2=scan(smart,9,"__"); Art_At_LEAST=scan(smart,10,"__"); totalBrut=scan(smart,11,"__"); totalImposable=scan(smart,12,"__"); run;
在大多数情况下,这很完美。但是有时第四个变量“ refClient”包含一个下划线,如下所示:
4__J04__1__LE_46__BE__compositeur / arrangeur__compositeur / bewerker __(blank)__ 1__17__108.03__93.7
即使分隔符是双下划线,扫描功能也以某种方式将此单个下划线检测为分隔符。
关于如何避免这种行为的任何想法?
Aurieli的代码有效,但是他们的答案并不能解释原因。您对scan
工作方式的理解不正确。
如果为指定的分隔符中有超过1个字符,则scan
每个字符都将被视为一个分隔符。您指定了_
两次。如果您指定了ab
then a
,则b
两者都将被视为定界符,而不是ab
被视为定界符。
scan
默认情况下,将多个连续的分隔符作为一个分隔符,这就是为什么你的代码处理都__
和_
作为分隔符。因此,如果您指定ab
为分隔符字符串,则默认情况下ba
,abba
等也将被视为单个分隔符。