Как определить входную переменную, когда в данных есть пробелы для переменной - PullRequest
0 голосов
/ 17 января 2019

Я хочу, чтобы две разные строки были в одном наборе данных. Я пытался отделить Валеус от "", но это не сработало. Представьте, что я не хочу писать "", но только строки внутри. Я много искал, но не нашел ничего, связанного с. Не могли бы вы, ребята, помочь мне добиться своей цели?

data ecl.dim_produtos;
   input id_produt id_departament id_order id_business id_portfolio initials $4. long_name $40. short_name $30.;
   datalines;
    1 1 10201 4 1 PZC "Puzzle Crédito" "Puzzle Crédito" 
    2 1 10202 4 1 PZR "Puzzle Reestruturados" "Reestruturados"
    3 2 10207 30 1 DBO "Banca Online" "Banca Online"
    4 3 10210 60 1 CLB "Colaboradores" "Colaboradores"
    5 1 10203 4 1 PZF "Puzzle Formação" "Code Academy"
    6 4 10205 5 1 HIP "Hipoteca Inversa" "Hip. Inversa"
    7 5 10206 25 1 EMP "DEMP" "DEMP"
    8 6 10208 45 1 NCO "NewCo" "NewCo"
    9 6 10211 70 1 LDRC "Lendrock" "Lendrock"
    10 4 10209 50 1 OTI "Otima Provision" "Otima"
    11 6 10001 1 1 LDC "Lendico" "Lendico"
    12 6 10007 1 1 MIBL "Market Invoice BL - EUR" "Market Invoice BL"
    13 6 10003 1 1 CRS "CreditShelf" "CreditShelf"
    14 6 10005 1 1 FUN "Funding Circle" "Funding Circle"
    15 6 10002 1 1 RAI "Raize" "Raize"
    16 4 10204 5 1 FLX "Flex" "Flex"
    17 6 10101 2 1 AUX "Auxmoney" "Auxmoney"
    18 6 10009 2 1 UPG "Upgrade - EUR" "Upgrade"
    19 6 10104 2 1 PRO "Prodigy Finance" "Prodigy"
    20 6 10102 2 1 FEL "Fellow Finance" "Fellow"
    21 6 10008 1 1 ASZ "Assetz - EUR" "Assetz"
    22 6 10010 2 1 LDB "Lendable - EUR" "Lendable"
    23 6 10004 1 1 LIN "Linked Finance" "Linked"
    24 6 10103 2 1 LDR "Lendrock" "Lendrock"
    25 6 10105 3 1 EDX "Edebex" "Edebex"
    26 6 10006 1 1 CAM "Camomille - FC" "Camomille"
    27 6 10106 3 1 MIN "Market Invoice - EUR" "Market Invoice"
    90 0 99991 102 2 DIV "Dívida Pública - EUR" "Dívida Pública"
    91 6 99992 103 2 CRP "Obrigações Corporate - EUR" "Obrigações Corporate"
    92 0 99990 101 3 SDA "Disp. Aplicações OIC - EUR" "Disp. Aplicações OIC"
    9999 0 999999 999 99 TOT "Total Patrimonial - EUR" "Total Patrimonial"
;
run;

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Наиболее надежным подходом будет:

  • определяет переменные оператора INPUT, используя оператор length или attrib.
  • используйте INFILE опции, чтобы указать, как строки данных анализируются с помощью INPUT
  • возьмите $ из оператора INPUT

Пример (оставить строки данных как есть):

length 
  id_produt id_departament id_order id_business id_portfolio 8
  initials $4
  long_name $40
  short_name $30
;
infile cards dsd dlm=" ";

В случае, если вам нужны строки данных с двойными кавычками, вам придется изменить строки данных, чтобы разделить значения двумя или более пробелами, и использовать аргумент & для переменных в выражении INPUT в стиле списка. .

Вы также можете разделить значения в строках данных символом tab и использовать DLM='09'x. У вас могут возникнуть проблемы с просмотром и вводом вкладок с помощью редактора SAS.

0 голосов
/ 17 января 2019

Сначала убедитесь, что вы используете модификатор :, если хотите включить спецификации informat в оператор INPUT, чтобы избежать переключения между списком и форматированным режимом ввода.

Если вы можете убедиться, что между значениями имеется как минимум два пробела (и что сами значения не имеют соседних пробелов внутри них), вы можете использовать модификатор &.

data test;
   input id_produt id_departament id_order id_business id_portfolio
         initials &:$4. long_name &:$40. short_name &:$30. 
   ;
datalines;
1 1 10201 4 1 PZC  Puzzle Crédito  Puzzle Crédito 
2 1 10202 4 1 PZR  Puzzle Reestruturados  Reestruturados
;

Или оставьте кавычки и убедитесь, что между каждым значением есть ровно один пробел ( и не делайте отступы! ) и добавьте параметр DSD.

data test;
   infile datalines dsd dlm=' ' truncover ;
   input id_produt id_departament id_order id_business id_portfolio
         initials :$4. long_name :$40. short_name :$30. 
   ;
datalines;
1 1 10201 4 1 PZC "Puzzle Crédito" "Puzzle Crédito"
2 1 10202 4 1 PZR "Puzzle Reestruturados" "Reestruturados"
;

Или используйте другой разделитель, с опцией DSD или без нее.

data test;
   infile datalines dsd dlm='|' truncover ;
   input id_produt id_departament id_order id_business id_portfolio
         initials :$4. long_name :$40. short_name :$30. 
   ;
datalines;
1|1|10201|4|1|PZC|Puzzle Crédito|Puzzle Crédito
2|1|10202|4|1|PZR|Puzzle Reestruturados|Reestruturados
;
...