Die Beispiele verwenden generierte Daten (Datalines) oder direkte Erstellungen von CAS-Tabellen über DATA-Schritte.
1 Codeblock
DATA STEP Data
Erklärung : Dieses Beispiel initialisiert zwei Variablen, eine VARCHAR und eine CHAR, mit Einzelbyte-Zeichenketten. Die INDEX-Funktion sucht die Position des Zeichens 'c'. Da es sich um Einzelbyte-Zeichen handelt, sind die zurückgegebenen Positionen (3) unabhängig vom Variablentyp identisch, was das Standardverhalten veranschaulicht.
Kopiert!
libname mycas cas;
data mycas.chaine_basique;
length x varchar(10);
length y $10;
x = 'abcde';
y = 'abcde';
xi = index(x,'c');
yi = index(y,'c');
put 'VARC_pos_c = ' xi;
put 'CHAR_pos_c = ' yi;
run;
proc print data=mycas.chaine_basique;
title 'Résultats de l''indexation basique';
run;
proc casutil incaslib='mycas' outcaslib='mycas';
dropcas casdata='chaine_basique' quiet;
quit;
1
LIBNAME mycas cas;
2
3
DATA mycas.chaine_basique;
4
LENGTH x varchar(10);
5
LENGTH y $10;
6
x = 'abcde';
7
y = 'abcde';
8
xi = index(x,'c');
9
yi = index(y,'c');
10
put 'VARC_pos_c = ' xi;
11
put 'CHAR_pos_c = ' yi;
12
RUN;
13
14
PROC PRINTDATA=mycas.chaine_basique;
15
title 'Résultats de l''indexation basique';
16
RUN;
17
18
PROC CASUTIL incaslib='mycas' outcaslib='mycas';
19
dropcas casdata='chaine_basique' quiet;
20
QUIT;
2 Codeblock
DATA STEP Data
Erklärung : Dieses Beispiel verwendet chinesische Multi-Byte-Zeichen. Die VARCHAR(10)-Variable speichert '你好世界' als 4 Zeichen. Die Suche nach '世' (dem dritten Zeichen) ergibt 3 für VARCHAR. Die CHAR(10)-Variable speichert dieselbe Zeichenkette, aber jedes Zeichen belegt 3 Bytes. Die Suche nach '世' (dem 7. Byte, wenn man ab 1 zählt) ergibt 7 für CHAR und demonstriert deutlich den Unterschied zwischen zeichenbasierter Semantik (VARCHAR) und bytebasierter Semantik (CHAR).
Kopiert!
libname mycas cas;
data mycas.chaine_multioctet;
length x varchar(10);
length y $10;
x = '你好世界'; /* "Bonjour monde" en chinois, 4 caractères, 12 octets */
y = '你好世界';
xi = index(x,'世'); /* Recherche du 3ème caractère */
yi = index(y,'世');
put 'VARCHAR_pos_shi = ' xi;
put 'CHAR_pos_shi = ' yi;
run;
proc print data=mycas.chaine_multioctet;
title 'Résultats de l''indexation multi-octets';
run;
proc casutil incaslib='mycas' outcaslib='mycas';
dropcas casdata='chaine_multioctet' quiet;
quit;
1
LIBNAME mycas cas;
2
3
DATA mycas.chaine_multioctet;
4
LENGTH x varchar(10);
5
LENGTH y $10;
6
x = '你好世界'; /* "Bonjour monde" en chinois, 4 caractères, 12 octets */
7
y = '你好世界';
8
xi = index(x,'世'); /* Recherche du 3ème caractère */
9
yi = index(y,'世');
10
put 'VARCHAR_pos_shi = ' xi;
11
put 'CHAR_pos_shi = ' yi;
12
RUN;
13
14
PROC PRINTDATA=mycas.chaine_multioctet;
15
title 'Résultats de l''indexation multi-octets';
16
RUN;
17
18
PROC CASUTIL incaslib='mycas' outcaslib='mycas';
19
dropcas casdata='chaine_multioctet' quiet;
20
QUIT;
3 Codeblock
DATA STEP Data
Erklärung : Dieses Beispiel vertieft die Verwendung von INDEX, indem es eine längere Unterzeichenfolge ('monde') in CHAR- und VARCHAR-Variablen sucht. Es zeigt, dass bei Einzelbyte-Zeichen das Verhalten dasselbe ist. Darüber hinaus veranschaulicht es, was passiert, wenn die gesuchte Unterzeichenfolge nicht gefunden wird (die INDEX-Funktion gibt 0 zurück), ein häufiger Fall bei der String-Manipulation.
Kopiert!
libname mycas cas;
data mycas.chaine_avancee;
length phrase_varchar varchar(50);
length phrase_char $50;
phrase_varchar = 'Le monde est beau, la vie est courte.';
phrase_char = 'Le monde est beau, la vie est courte.';
pos_monde_varchar = index(phrase_varchar,'monde');
pos_monde_char = index(phrase_char,'monde');
pos_non_trouve_varchar = index(phrase_varchar,'inexistant');
pos_non_trouve_char = index(phrase_char,'inexistant');
put 'VARCHAR "monde" à la position : ' pos_monde_varchar;
put 'CHAR "monde" à la position : ' pos_monde_char;
put 'VARCHAR "inexistant" à la position : ' pos_non_trouve_varchar;
put 'CHAR "inexistant" à la position : ' pos_non_trouve_char;
run;
proc print data=mycas.chaine_avancee;
title 'Résultats de recherche avancée de sous-chaînes';
run;
proc casutil incaslib='mycas' outcaslib='mycas';
dropcas casdata='chaine_avancee' quiet;
quit;
1
LIBNAME mycas cas;
2
3
DATA mycas.chaine_avancee;
4
LENGTH phrase_varchar varchar(50);
5
LENGTH phrase_char $50;
6
phrase_varchar = 'Le monde est beau, la vie est courte.';
7
phrase_char = 'Le monde est beau, la vie est courte.';
put 'VARCHAR "monde" à la position : ' pos_monde_varchar;
16
put 'CHAR "monde" à la position : ' pos_monde_char;
17
put 'VARCHAR "inexistant" à la position : ' pos_non_trouve_varchar;
18
put 'CHAR "inexistant" à la position : ' pos_non_trouve_char;
19
RUN;
20
21
PROC PRINTDATA=mycas.chaine_avancee;
22
title 'Résultats de recherche avancée de sous-chaînes';
23
RUN;
24
25
PROC CASUTIL incaslib='mycas' outcaslib='mycas';
26
dropcas casdata='chaine_avancee' quiet;
27
QUIT;
4 Codeblock
DATA STEP Data
Erklärung : Dieses Beispiel verdeutlicht die Längensemantik unter Verwendung der SUBSTR-Funktion in der CAS-Umgebung, einem Schlüsselelement von Viya. Es verwendet Multi-Byte-Zeichen und zeigt, dass SUBSTR bei VARCHAR Zeichen basierend auf ihrer logischen Position (nach Zeichen) extrahiert, während es bei CHAR Bytes extrahiert. Dies kann zu unerwarteten Ergebnissen führen, wenn der Unterschied nicht verstanden wird, insbesondere wenn versucht wird, Teile von Multi-Byte-Zeichen mit einer CHAR-Variable zu extrahieren. Dies kann auch eine Fehlerquelle sein, wenn die angegebene Position mitten in einem Multi-Byte-Zeichen für eine CHAR-Variable liegt oder die definierte Größe überschreitet, wenn die Semantik nicht berücksichtigt wird.
Kopiert!
libname mycas cas;
data mycas.chaine_substr_cas;
length var_char $10;
length var_varchar varchar(10);
/* Chaîne de 3 caractères multi-octets (ex: chinois) */
var_char = '你好世'; /* 3 caractères, 9 octets */
var_varchar = '你好世';
/* Extraction du 2ème caractère (VARCHAR) vs 2ème octet (CHAR) */
sub_varchar_char = substr(var_varchar, 2, 1);
sub_char_byte = substr(var_char, 2, 1);
/* Tentative d'extraction d'un caractère au-delà de la longueur réelle par octet pour CHAR */
sub_char_byte_erreur = substr(var_char, 7, 1); /* Le 7ème octet est le 3ème caractère */
put 'VARCHAR (caractère 2) : ' sub_varchar_char;
put 'CHAR (octet 2) : ' sub_char_byte;
put 'CHAR (octet 7, 3ème caractère) : ' sub_char_byte_erreur;
run;
proc print data=mycas.chaine_substr_cas;
title 'Comparaison SUBSTR avec CHAR et VARCHAR en CAS';
run;
proc casutil incaslib='mycas' outcaslib='mycas';
dropcas casdata='chaine_substr_cas' quiet;
quit;
1
LIBNAME mycas cas;
2
3
DATA mycas.chaine_substr_cas;
4
LENGTH var_char $10;
5
LENGTH var_varchar varchar(10);
6
7
/* Chaîne de 3 caractères multi-octets (ex: chinois) */
8
var_char = '你好世'; /* 3 caractères, 9 octets */
9
var_varchar = '你好世';
10
11
/* Extraction du 2ème caractère (VARCHAR) vs 2ème octet (CHAR) */
12
sub_varchar_char = substr(var_varchar, 2, 1);
13
sub_char_byte = substr(var_char, 2, 1);
14
15
/* Tentative d'extraction d'un caractère au-delà de la longueur réelle par octet pour CHAR */
16
sub_char_byte_erreur = substr(var_char, 7, 1); /* Le 7ème octet est le 3ème caractère */
17
18
put 'VARCHAR (caractère 2) : ' sub_varchar_char;
19
put 'CHAR (octet 2) : ' sub_char_byte;
20
put 'CHAR (octet 7, 3ème caractère) : ' sub_char_byte_erreur;
21
RUN;
22
23
PROC PRINTDATA=mycas.chaine_substr_cas;
24
title 'Comparaison SUBSTR avec CHAR et VARCHAR en CAS';
25
RUN;
26
27
PROC CASUTIL incaslib='mycas' outcaslib='mycas';
28
dropcas casdata='chaine_substr_cas' quiet;
29
QUIT;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.