在SAS Enterprise Guide中读取含等号URL的日志数据遇变量缺失问题求助
解决SAS中含等号的URL变量读取问题
我完全懂你碰到的麻烦——当URL里带等号时,SAS的命名输入会错把这些等号当成变量名和值的分隔符,导致URL变量读不全甚至直接缺失;用PROC IMPORT的话,又会因为REFERER里的空格把它拆成好几个变量。下面给你两个靠谱的解决方案:
方案一:修改DATA步的INPUT语句(推荐,更可控)
问题出在你INPUT语句的格式写法上,你得给每个命名变量加上冒号修饰符(:)。这个修饰符会让SAS遵循DSD选项的规则,把引号包起来的内容(包括里面的等号、空格)当成一个完整的变量值,直到碰到下一个空格分隔符才停止读取。
修改后的代码如下:
DATA URL; INFILE datalines delimiter=" " dsd EXPANDTABS TRUNCOVER; /* 每个变量后加冒号,确保读取完整的引号内内容 */ INPUT F1 $18. REQUESTURL : $40. URL : $40. REFERER : $40.; DATALINES; 21-07-2017 REQUESTURL="www.google.dk" URL="www.jubii.dk/user=hej" REFERER="(Iphone CPU Iphone OS)" ; RUN;
方案二:用PROC IMPORT并配置正确选项
如果你更倾向于用PROC IMPORT,一定要加上DSD选项,这样SAS会识别引号作为值的包裹符号,不会拆分引号内的内容。同时要关闭自动读取变量名(因为你的数据里是REQUESTURL=这种键值对,不是表头),手动指定变量格式:
PROC IMPORT DATAFILE="你的实际文件路径" OUT=URL DBMS=DLM REPLACE; DELIMITER=' '; /* 指定空格为分隔符 */ DSD; /* 启用引号识别,忽略引号内的分隔符 */ GETNAMES=NO; /* 数据第一行不是变量名 */ DATAROW=1; /* 从第一行开始读取数据 */ /* 手动指定每个变量的输入格式 */ INFORMAT F1 $18. REQUESTURL $40. URL $40. REFERER $40.; /* 手动指定输出格式 */ FORMAT F1 $18. REQUESTURL $40. URL $40. REFERER $40.; RUN;
这样处理后,URL里的等号会被完整保留在变量值中,REFERER里的空格也不会导致变量被拆分。
内容的提问来源于stack exchange,提问作者Andreas Steinberg
相关产品推荐
相关产品推荐

