2012-03-23 55 views
1

我可以创建数字类型的编号范围列表,但不能创建字符类型。SAS - 创建编号范围字符变量列表?

我的代码是与此类似:

DATA TestDataset; 
    INPUT a1-a3 $; 
    DATALINES; 
    A B C 
    ; 
RUN; 

这产生3个变量 - [A1],[A2]和[A3]如预期。但[a3]是字符,但[a1]和[a2]是数字。这给我留下如下表所示的缺失值:

a1 a2 a3 
. . C 

下面的代码有效,但显然它不能很好地缩放。

INPUT a1 $ a2 $ a3 $; 

我错过了什么吗?

回答

4

我相信你可以在长度声明中使用连字符号来得到你想要的。无论如何你真的应该使用一个长度声明。另外它默认为8美元。

DATA TestDataset; 
length a1-a3 $20; 
INPUT a1-a3 ; 
DATALINES; 
A B C 
; 
RUN; 
+0

+1只是测试它 - 这工作。我喜欢你的解决方案比我的更好:-) – 2012-03-23 16:18:49

+0

这完美的作品。你是对的,我应该使用'LENGTH'声明 - 我对SAS还是有些新鲜的,所以非常感谢你的帮助。 – Nossidge 2012-04-01 14:06:21

4

我想出了一个解决方案宏:

%MACRO var_list_char (var_prefix, n); 
    %LOCAL i ; 

    %DO i = 1 %TO &n; 
     &var_prefix&i$ 
    %END; 
%MEND; 


DATA TestDataset; 
    INPUT %var_list_char (a, 3); 

    DATALINES; 
     A B C 
    ; 
RUN; 

我希望我能找到一个方法来做到这一点没有宏 - 我会继续挖了一下,如果我找到更会更新这个帖子。同时,上述方法肯定会奏效。

UPDATE 1:@ carolinajay65上面的解决方案是正确的非宏观方法。

UPDATE 2:还有另一种方法,我找到了。的语言特性支持这种技术

DATA TestDataset; 
    INPUT (a1-a3) ($); 
    DATALINES; 
    A B C 
    ; 
RUN; 

更多的文档可以发现here,在标有“如何组变量和Informats”一节。

+1

+1'INPUT(A1-A3)($);' – stevepastelan 2012-03-28 14:56:17

+0

我已经接受_CarolinaJay65_的回答上面,但我已经给你+1的链接和变量组括号语法,很高兴知道。 – Nossidge 2012-04-01 14:10:06

+0

感谢我的变量组语法!很高兴知道。 – cmjohns 2012-04-03 15:31:51