首页 > 解决方案 > SAS 扫描功能分隔符无法正常工作

问题描述

我在 sas 中遇到了扫描功能的问题。

我拥有的数据集包含一个需要拆分为多个变量的变量。

变量的结构如下:

4__J04__1__SCH175__BE__compositeur/arrangeur__compositeur/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;

大多数情况下,这可以完美运行。然而,有时第 4 个变量 'refClient' 包含一个下划线,如下所示:

4__J04__1__LE_46__BE__compositeur/arrangeur__compositeur/bewerker__(空白)__1__17__108.03__93.7

不知何故,即使分隔符是双下划线,扫描功能也会将此单个下划线检测为分隔符。

关于如何避免这种行为的任何想法?

标签: sas

解决方案


Aurieli 的代码有效,但他们的回答没有解释原因。您对工作原理的理解scan是不正确的。

  1. 如果为 指定的分隔符中有超过 1 个字符,则scan每个字符都被视为一个分隔符。你已经指定_了两次。如果您已指定abthena并且b两者都将被视为定界符,而不是ab定界符。
  2. scan默认情况下,将多个连续的定界符视为一个定界符,这就是您的代码同时将___视为定界符的原因。因此,如果您指定ab为分隔符字符串 thenbaabba也将默认计为单个分隔符。

推荐阅读