格式化变量然后重新编码

时间:2015-10-18 21:56:14

标签: sas

我开始使用PROC FORMAT格式化我的变量。后来我发现我必须更改数据集中的一些变量。我想保持我最初创建的格式,但如果我重新编码,我认为我不能这样做。我假设这是正确的吗?我想我将不得不改变我的一些格式以适应我的新变量,但有没有办法

3 个答案:

答案 0 :(得分:0)

我不太确定我理解你的问题,但我想我仍然可以通过让你了解SAS中重新编码变量和使用格式化值之间的区别来回答你的问题。

如果您最初创建了一种格式,则该格式将应用于运行分析时SAS数据集中的值。因此,如果数据集中的字符变量中有“块A”值,并且您具有将“块A”映射到格式化值1的格式化值,那么如果您进入并稍后更改“块”的值对于其他内容并重新运行您的分析,“块A”将不再打印在您的输出中或在分析中用作格式化值。格式独立于数据集中的基础值。运行分析时,SAS基本上会在运行时查看数据集,并将每个值映射到您在proc格式语句中指定的格式化值,然后使用格式化值执行分析。

如果要保留原始格式,可以使用两种不同的格式:一种用于旧格式,另一种用于新格式,并根据您希望使用哪种格式将相应的格式调用到您的过程中。

您还可以在datastep中使用put语句将先前格式化的值和“硬编码”转换为数据集中的实际值。例如,如果你有一个名为“blockno”的格式,你使用一个名为“block”的变量,那么,使用旧的格式,你可以创建一个名为blockno_old的变量,并将其设置为旧的格式化值:

block_old=put(block, $blockno.).

然后,您可以使用新值修改块。然后,您将需要在数据集中使用变量:block_old,其中包含变量和块的原始值,在更改后,变量将包含新值。

答案 1 :(得分:0)

Proc Format不是格式声明

使用proc format,您可以创建格式,而不是将它们分配给变量。例如,您可以使用format语句执行此操作。

变量的格式不是其内部长度

SAS变量只能有两种类型:数字 (非SAS程序员调用double chracter (非SAS程序员称为固定长度字符)然而,它可以有数百种不同的格式。格式只是确定变量在报表中的表示方式。

您可以完美地更改变量的格式而不更改其长度。

试试这个:

proc format;
    value myFormat 
        0-10 = 'small' 
        10-20 ='medium' 
        20-100='large' ;
run;

data test1;
    infile datalines;
    length myVar 8.;
    input myVar;
    format myVar 6.2;
    datalines;
1
2.1
9.12
10.123
15.1234
22.12345
50.123456
;

data test2;
    set test1;
    format myVar myFormat.;

data test3;
    set test2;
    format myVar 12.6;
run;

title 'In test1, myVar has format 6.2';     
proc print data=test1;
run;

title 'In test2, myVar has format myFormat';    
proc print data=test2;
run;

title 'In test3, myVar has format 12.6';    
proc print data=test3;
run;

答案 2 :(得分:0)

您可以在格式目录中创建格式并将其存储以供将来参考。总是会发生数据集具有新变量和具有新数据的更新变量。因此,使用格式目录来容纳新旧更改实际上有助于维护原始值和当前值的历史记录。